首頁 > 後端開發 > C++ > 為什麼在處理 XML 命名空間時 SelectSingleNode 傳回 Null?

為什麼在處理 XML 命名空間時 SelectSingleNode 傳回 Null?

Barbara Streisand
發布: 2025-01-07 21:03:48
原創
393 人瀏覽過

Why Does SelectSingleNode Return Null When Dealing with XML Namespaces?

故障排除 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

正確的方法是使用 XmlNamespaceManagerSelectSingleNode。這允許您指定名稱空間前綴及其相應的 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板