Xincludeタグでワイルドカードを使用することは可能ですか?
質問
私はそれが不可能であることを恐れていますが、それが不可能であると言われている場所を見つけていません。
ワイルドカードを使用してXMLドキュメント内にファイルのセットを含めたいと思います。このような:
<?xml version="1.0" encoding="utf-8"?>
<mydocument>
<!-- ... -->
<xi:include href="*include.xml"/>
</mydocument>
私はそれがうまくいかないことを知っていますが、それは私の意図をはっきりと表現していると思います。これを達成する方法はありますか?
編集:
使ってみました xpointer
属性ですが、それを機能させることができませんでした。
解決
Xincludeタグでワイルドカードを使用することは可能ですか?
いいえ href
URIを示し、これらにはワイルドカードの概念がありません。
それ以外の場合は、Googleホームページを次のように言うことでミラーリングすることが可能です href="http://www.google.com/*"
.
ヒント:ファイルシステムには、ワイルドカードの概念もありません。 シェル 行う。彼らは、彼らが道を解析して、 *
. 。基礎となるファイルシステムは、アスタリスクを見ることができません。
他のヒント
簡単なオプションがあります
xmlResolverをオーバーライドして、ワイルドカードの認識リゾルバーを作成します。
class WildCardResolver : XmlUrlResolver
{
public override Uri ResolveUri(Uri baseUri, string relativeUri)
{
try
{
DirectoryInfo di = new DirectoryInfo(baseUri.AbsolutePath); // TODO Check it is valid.
string combinedFilePath = Path.GetTempFileName();
using (FileStream combinedStream = new FileStream(combinedFilePath, FileMode.OpenOrCreate))
{
foreach (FileInfo fi in di.GetFiles(relativeUri))
{
using (FileStream fileStream = new FileStream(fi.FullName, FileMode.Open, FileAccess.Read))
{
fileStream.CopyTo(combinedStream);
}
}
}
Uri absUri = new Uri(combinedFilePath);
return absUri;
}
catch(Exception ex)
{
//Log Exception
return base.ResolveUri(baseUri, relativeUri);
}
}
}
ワイルドカードがまったく適用できるかどうかに気付くことがたくさんあります
さらに、ソースXMLがからのものであるとしましょう。
file:// c:/myxmlrepository/myxml.xml
*inc.xmlを含む
これで、ベースURIはファイル// c:/temp/tmpa0.tmpです
.
.
幸運を祈ります、
編集:
オーバーライドする別の方法があります
public override object GetEntity(Uri absoluteUri, string role, Type ofObjectToReturn)
しかし、それによって課される他の問題があります...絶対的なURIが常に有効ではないため、XincludingReaderがそれを検証しようとします。
@tomalekは絶対にここにあります。あなたがやろうとしていることをする方法はありますが、Xincludeは正しい答えではありません。ワイルドカードの拡張を処理できるある種のツールが必要になります。
あなたはほぼ確実にノルムウォルシュのようなものでこれを行うことができます XPROC実装-Calabash しかし、何らかの形でXincludeに相当する独自のロールを転がす必要があります。