故障排除 SelectSingleNode
具有命名空間的 XML 文件中的 Null 回傳
使用包含命名空間的 XML 文件時,使用 SelectSingleNode
尋找特定節點可能會意外傳回 null
。當目標元素位於未在 XPath 表達式中明確聲明的命名空間內時,通常會發生這種情況。
我們舉個例子來說明:
<code class="language-xml"><?xml version="1.0" encoding="utf-8"?> <project defaulttargets="Build" toolsversion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <itemgroup> <compile include="clsWorker.cs"/> </itemgroup> </project></code>
如果將此 XML 載入到 XmlDocument
(例如 xmldoc
)中,xmldoc.SelectSingleNode("//Compile")
將傳回 null
。這是因為 compile
元素位於 xmlns
聲明的命名空間內。 刪除 xmlns
屬性可以解決該問題,但這並不總是實用的解決方案。
解:使用XmlNamespaceManager
正確的方法是使用 XmlNamespaceManager
和 SelectSingleNode
。這允許您指定名稱空間前綴及其相應的 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
呼叫中使用此管理器。 這可以正確識別並檢索 compile
節點。 關鍵是在 XPath 表達式中使用前綴 msbld:Compile
來明確引用命名空間。
以上是為什麼在處理 XML 命名空間時 SelectSingleNode 傳回 Null?的詳細內容。更多資訊請關注PHP中文網其他相關文章!