是否可以使用通配符XInclude的标签?(Is it possible to use wildca

2019-09-25 18:31发布

恐怕这是不可能的,但还没有在任何地方发现它被认为是不可能的要么。

我想包括使用通配符一个XML文档中的一组文件。 像这样:

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

我知道这是行不通的,但我认为这明确表示了我的意图。 有没有一种方法来实现这一目标?

编辑:

我试图用xpointer属性,但不能使它工作。

Answer 1:

是否可以使用通配符XInclude的标签?

号的href表示URI,而这些不具备通配符的概念。

否则,将有可能说像镜像谷歌主页href="http://www.google.com/*"

提示:文件系统一样也没有通配符的任何概念。 贝壳做的。 他们这样做的空白为您填写时,他们分析的路径,看到的繁重* 。 底层的文件系统永远不会看到星号。



Answer 2:

有一个快速的选择

覆盖的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);
        }
    }
}

有很多事情要做的通知,如果通配符是适用于所有

此外,基本URI可能会非常棘手,因为让说,源XML是从

文件:// C:/myXMLRepository/myXML.xml

包括* inc.xml

现在基本URI是文件// C:/temp/tmpA0.tmp

祝你好运,

编辑:

那里有另一种方式来覆盖

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

但也有通过实行其他问题......因为绝对URI并不总是有效,并且XIncludingReader尝试和验证。



Answer 3:

@Tomalek是绝对正确的位置。 有办法做你想要做什么,但XInclude的是不是正确的答案。 你将需要某种形式的工具,它可以处理通配符扩展你的。

你可以几乎肯定做到这一点的东西,如Norm Walsh的XPROC实现-蠡但你需要自己等同滚到XInclude的某种方式。



文章来源: Is it possible to use wildcards with XInclude tags?