为了账号安全,请及时绑定邮箱和手机立即绑定

我们可以将XML文件导入另一个XML文件吗?

我们可以将XML文件导入另一个XML文件吗?

慕莱坞森 2019-12-12 14:10:16
我们可以将一个XML文件导入另一个XML文件吗?我的意思是说,在XML中是否有任何导入标记,它将XML路径作为参数并导入XML(为其提供路径)。
查看完整描述

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>



查看完整回答
反对 回复 2019-12-13
?
holdtom

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>



查看完整回答
反对 回复 2019-12-13
  • 3 回答
  • 0 关注
  • 431 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信