恐怕这是不可能的,但还没有在任何地方发现它被认为是不可能的要么。
我想包括使用通配符一个XML文档中的一组文件。 像这样:
<?xml version="1.0" encoding="utf-8"?>
<mydocument>
<!-- ... -->
<xi:include href="*include.xml"/>
</mydocument>
我知道这是行不通的,但我认为这明确表示了我的意图。 有没有一种方法来实现这一目标?
编辑:
我试图用xpointer
属性,但不能使它工作。
是否可以使用通配符XInclude的标签?
号的href
表示URI,而这些不具备通配符的概念。
否则,将有可能说像镜像谷歌主页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);
}
}
}
有很多事情要做的通知,如果通配符是适用于所有
此外,基本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尝试和验证。
@Tomalek是绝对正确的位置。 有办法做你想要做什么,但XInclude的是不是正确的答案。 你将需要某种形式的工具,它可以处理通配符扩展你的。
你可以几乎肯定做到这一点的东西,如Norm Walsh的XPROC实现-蠡但你需要自己等同滚到XInclude的某种方式。