3 回答

TA贡献2041条经验 获得超4个赞
其他答案包括两种最常见的方法,即Xinclude和XML外部实体。对于为什么要使用Xinclude以及几个示例实现,Microsoft撰写了非常好的文章。我引用了下面的比较:
每个http://msdn.microsoft.com/en-us/library/aa302291.aspx
为什么使用XInclude?
一个人可能会问的第一个问题是:“为什么使用XInclude而不是XML外部实体?” 答案是XML外部实体具有许多众所周知的限制和不便的含义,这有效地阻止了它们成为通用包含工具。特别:
XML外部实体不能是成熟的独立XML文档-不允许独立XML声明或Doctype声明。这实际上意味着XML外部实体本身不能包含其他外部实体。
XML外部实体必须是格式良好的XML(乍看之下还不错,但是假设您想将示例C#代码包含在XML文档中)。
无法加载外部实体是致命错误;严禁任何恢复。
可能仅包括整个外部实体,而没有办法仅包含文档的一部分。-外部实体必须在DTD或内部子集中声明。这就打开了一个充满含义的潘多拉魔盒,例如必须在Doctype声明中命名文档元素,并且验证读者可能需要在DTD中定义文档的完整内容模型。
使用XML外部实体作为包含机制的缺陷已为人所知,并且实际上催生了Microsoft和IBM在1999年向W3C提交XML包含提案的过程。该提案定义了通用XML包含工具的处理模型和语法。
四年后,XML Inclusions的1.0版(也称为Xinclude)成为候选推荐书,这意味着W3C认为它已经得到了广泛的审查,并且满足了其准备解决的基本技术问题,但尚未解决。全面推荐。
提供各种示例实现的另一个不错的站点是https://www.xml.com/pub/a/2002/07/31/xinclude.html。以下是他们网站上的一个常见用例示例:
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<title>The Wit and Wisdom of George W. Bush</title>
<xi:include href="malapropisms.xml"/>
<xi:include href="mispronunciations.xml"/>
<xi:include href="madeupwords.xml"/>
</book>

TA贡献1805条经验 获得超10个赞
Mads Hansen的解决方案很好,但是要成功读取.NET 4中的外部文件,需要花费一些时间来弄清楚使用有关解析程序,ProhibitDTD等的注释中的提示。
这是这样做的:
XmlReaderSettings settings = new XmlReaderSettings();
settings.DtdProcessing = DtdProcessing.Parse;
XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials;
settings.XmlResolver = resolver;
var reader = XmlReader.Create("logfile.xml", settings);
XmlDocument doc = new XmlDocument();
doc.Load(reader);
foreach (XmlElement element in doc.SelectNodes("//event"))
{
var ch = element.ChildNodes;
var count = ch.Count;
}
logfile.xml:
<?xml version="1.0"?>
<!DOCTYPE logfile [
<!ENTITY events
SYSTEM "events.txt">
]>
<logfile>
&events;
</logfile>
events.txt:
<event>
<item1>item1</item1>
<item2>item2</item2>
</event>
添加回答
举报