ホームページ >バックエンド開発 >C++ >C# で SelectSingleNode を使用して名前空間を持つ XML 要素を取得するにはどうすればよいですか?

C# で SelectSingleNode を使用して名前空間を持つ XML 要素を取得するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-07 20:53:10993ブラウズ

How Do I Use SelectSingleNode in C# to Retrieve XML Elements with Namespaces?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。