1

残念ながら不可能ですが、不可能と言われているところも見つかりませんでした。

ワイルドカードを使用して XML ドキュメント内に一連のファイルを含めたいと考えています。このような:

<?xml version="1.0" encoding="utf-8"?>
<mydocument>
  <!-- ... -->
  <xi:include href="*include.xml"/>
</mydocument>

うまくいかないことはわかっていますが、私の意図を明確に表していると思います。これを達成する方法はありますか?

編集:

属性を使用しようとしましxpointerたが、機能しませんでした。

4

3 に答える 3

3

XInclude タグでワイルドカードを使用することは可能ですか?

いいえ。hrefは URI を示し、これらにはワイルドカードの概念がありません。

それ以外の場合は、次のように言って Google ホームページをミラーリングすることができますhref="http://www.google.com/*"

ヒント: ファイル システムには、ワイルドカードの概念もありません。シェルはそうします。パスを解析して*. 基盤となるファイル システムがアスタリスクを認識することはありません。

于 2010-12-20T10:36:31.500 に答える
1

クイックオプションがあります

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 が

ファイル://c:/myXMLRepository/myXML.xml

*inc.xml を含む

現在、ベース URI は file//c:/temp/tmpA0.tmp です。

.

.

ご多幸をお祈り申し上げます。

編集:

オーバーライドする別の方法があります

public override object GetEntity(Uri absoluteUri, string role, Type ofObjectToReturn)

しかし、それによって課せられる他の問題があります...絶対URIが常に有効であるとは限らず、XInclusiveReaderがそれを試みて検証するためです。

于 2012-03-22T09:02:31.037 に答える
0

@Tomalekは絶対にここにあります。やろうとしていることを実行する方法はありますが、XInclude は正しい答えではありません。ワイルドカード展開を処理できる何らかのツールが必要になります。

ほとんどの場合、Norm Walsh のXProc 実装 (ひょうたん) のようなものでこれを行うことができますが、何らかの方法で XInclude に相当するものを独自に作成する必要があります。

于 2010-12-22T12:24:51.440 に答える