使用命名空間導覽 XML:SelectSingleNode
挑戰
使用包含命名空間的 XML 文件時,.NET 中的標準 SelectSingleNode
方法可能會出現意外行為。 這是因為像 //Compile
這樣的簡單 XPath 表達式本身並不理解命名空間。
我們舉個例子來說明:
<code class="language-xml"><project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <itemgroup> <compile include="clsWorker.cs"/> </itemgroup> </project></code>
嘗試使用 <compile>
選擇 xmldoc.SelectSingleNode("//Compile")
節點將回傳 null
。 命名空間宣告 xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
是罪魁禍首。
解:利用XmlNamespaceManager
在命名空間 XML 中正確選擇節點的關鍵是利用 XmlNamespaceManager
類別。此類別可讓您明確定義命名空間前綴及其對應的 URI。
以下是修改程式碼的方法:
<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>
我們建立一個 XmlNamespaceManager
,加入命名空間映射(「msbld」作為指定 URI 的前綴),然後將此管理器傳遞給 SelectSingleNode
。 XPath 表達式 //msbld:Compile
現在可以正確辨識定義的命名空間內的節點。 即使在複雜的命名空間 XML 結構中,這種方法也能確保準確的節點選擇。
以上是XML命名空間如何影響「SelectSingleNode」以及如何正確選擇節點?的詳細內容。更多資訊請關注PHP中文網其他相關文章!