XmlDocument
XML ドキュメントでは、名前は同じだが起源が異なる要素を区別するために名前空間がよく使用されます。 これにより、XmlDocument
の SelectSingleNode
メソッドを使用した要素の選択が複雑になる可能性があります。
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 サイトの他の関連記事を参照してください。