SelectSingleNode を使用して C# で XML 名前空間を処理する
SelectSingleNode
を使用して XML 要素にアクセスするときの一般的な問題は、タグに XML 名前空間が含まれている場合に null を返す可能性があることです。この問題は、SelectSingleNode
がデフォルトではデフォルトの名前空間内の要素のみを考慮するために発生します。
提供されている XML 構造の例を考えてみましょう:
<code class="language-xml"><project defaulttargets="Build" toolsversion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"><itemgroup><compile include="clsWorker.cs"></compile></itemgroup></project></code>
この XML を XmlDocument
にロードし、「Compile」要素を取得しようとすると:
<code class="language-csharp">XmlDocument xmldoc = new XmlDocument(); xmldoc.LoadXml(Xml); XmlNode node = xmldoc.SelectSingleNode("//Compile"); // 返回null</code>
「Compile」要素は「https://www.php.cn/link/55a51239dc6fe8cf8c09ec91f36f5250.
」にあるため、結果は null になります。解決策: XmlNamespaceManager を使用します
この問題を解決するには、XmlNamespaceManager
操作を実行するときに SelectSingleNode
を使用して正しい名前空間を指定する必要があります。
<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」要素を正常に取得できるようになりました。
以上がC# で SelectSingleNode を使用して名前空間を持つ XML 要素を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。