ホームページ >バックエンド開発 >C++ >XmlDocument で SelectSingleNode を使用するときに名前空間の衝突を解決するにはどうすればよいですか?

XmlDocument で SelectSingleNode を使用するときに名前空間の衝突を解決するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-07 20:56:41336ブラウズ

How Can I Resolve Namespace Collisions When Using SelectSingleNode with XmlDocument?

XmlDocument

を使用した XML 解析における名前空間の競合のナビゲート

XML ドキュメントでは、名前は同じだが起源が異なる要素を区別するために名前空間がよく使用されます。 これにより、XmlDocumentSelectSingleNode メソッドを使用した要素の選択が複雑になる可能性があります。

xmlns 属性を使用して http://schemas.microsoft.com/developer/msbuild/2003 名前空間を定義する次の XML スニペットを考えてみましょう。

<code class="language-xml"><project defaulttargets="Build" toolsversion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <Compile include="clsWorker.cs"/>
  </ItemGroup>
</project></code>

<Compile> 要素を取得する単純な試み:

<code class="language-csharp">XmlDocument xmldoc = new XmlDocument();
xmldoc.LoadXml(xml);
XmlNode node = xmldoc.SelectSingleNode("//Compile");</code>

null を生成します。 これは、XPath 式が名前空間を無視するためです。 解決策は、XmlNamespaceManager:

を使用することです。

名前空間付き XML 内の <Compile> 要素を正しく選択するには、XmlNamespaceManager を利用して名前空間をプレフィックスにマップします。

<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>

現在、SelectSingleNode<Compile> 要素を正確に返し、その属性と子ノードへのアクセスを許可します。 このアプローチにより、名前空間の衝突が効果的に解決され、堅牢な XML 操作が可能になります。

以上がXmlDocument で SelectSingleNode を使用するときに名前空間の衝突を解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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