使用 XmlDocument
XML 文件通常使用名稱空間來區分具有相同名稱但來源不同的元素。 這可能會使使用 XmlDocument
的 SelectSingleNode
方法的元素選擇變得複雜。
考慮使用 xmlns
屬性定義 http://schemas.microsoft.com/developer/msbuild/2003
命名空間的 XML 片段:
<code class="language-xml"><project defaulttargets="Build" toolsversion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> <Compile include="clsWorker.cs"/> </ItemGroup> </project></code>
檢索 <Compile>
元素的天真嘗試:
<code class="language-csharp">XmlDocument xmldoc = new XmlDocument(); xmldoc.LoadXml(xml); XmlNode node = xmldoc.SelectSingleNode("//Compile");</code>
將產生null
。 這是因為 XPath 表達式忽略名稱空間。 解決方案在於使用 XmlNamespaceManager
:
要正確選擇命名空間 XML 中的 <Compile>
元素,請利用 XmlNamespaceManager
將命名空間對應到前綴:
<code class="language-csharp">XmlNamespaceManager ns = new XmlNamespaceManager(xmldoc.NameTable); ns.AddNamespace("msbld", "http://schemas.microsoft.com/developer/msbuild/2003"); XmlNode node = xmldoc.SelectSingleNode("//msbld:Compile", ns);</code>
現在,SelectSingleNode
將準確地返回 <Compile>
元素,允許存取其屬性和子節點。 這種方法有效地解決了命名空間衝突並實現了健全的 XML 操作。
以上是將 SelectSingleNode 與 XmlDocument 結合使用時如何解決命名空間衝突?的詳細內容。更多資訊請關注PHP中文網其他相關文章!