恐怕这是不可能的,但是在任何地方都没有发现它也是不可能的。

我想在使用通配符的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);
        }
    }
}

有很多事情要注意是否适用通配符

此外,baseuri可能很棘手,因为假设源XML来自

file:// c:/myxmlrepository/myxml.xml

包括 *inc.xml

现在base uri是file // c:/temp/tmpa0.tmp

.

.

祝你好运,

编辑:

还有另一种覆盖方式

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

但是,这也引起了其他问题……因为绝对URI并不总是有效的,而XincludingReader则尝试对其进行验证。

@Tomalek绝对就在这里。有一些方法可以做您想做的事情,但是Xinclude并不是正确的答案。您将需要某种可以为您处理通配符扩展的工具。

您几乎可以肯定可以使用Norm Walsh的事情来做到这一点 XPROC实施-Calabash 但是,您需要以某种方式将自己的等同于Xinclude滚动。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top