我們可以將XML文件導入另一個XML文件嗎?



Answers

其他答案涵蓋了兩種最常見的方法,Xinclude和XML外部實體。 微軟對於為什麼更喜歡Xinclude以及幾個示例實現有很好的評論。 我引用了下面的比較:

根據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外部實體作為包含機制的缺陷已為人所知,並且事實上催生了微軟和IBM在1999年向W3C提交XML包含提案。 該提案為通用XML包含設施定義了處理模型和語法。

四年後,XML包含的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>
Question

我們可以將XML文件導入另一個XML文件嗎?

我的意思是在XML中有任何導入標記,它將XML路徑作為參數並導入XML(提供了該路徑)。




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>





Links