名前空間を使用した XML のナビゲーション: SelectSingleNode
の課題
名前空間を含む XML ドキュメントを操作する場合、.NET の標準の SelectSingleNode
メソッドが予期しない動作をする可能性があります。 これは、//Compile
のような単純な XPath 式は本質的に名前空間を理解しないためです。
例で説明してみましょう:
<code class="language-xml"><project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <itemgroup> <compile include="clsWorker.cs"/> </itemgroup> </project></code>
<compile>
を使用して xmldoc.SelectSingleNode("//Compile")
ノードを選択しようとすると、null
が返されます。 名前空間宣言 xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
が原因です。
解決策: XmlNamespaceManager
名前空間付き XML 内のノードを正しく選択するための鍵は、XmlNamespaceManager
クラスを利用することです。このクラスを使用すると、名前空間プレフィックスとそれに対応する 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
を作成し、名前空間マッピング (指定された URI のプレフィックスとして「msbld」) を追加して、このマネージャーを SelectSingleNode
に渡します。 XPath 式 //msbld:Compile
は、定義された名前空間内のノードを正しく識別するようになりました。 このアプローチにより、複雑な名前空間を持つ XML 構造でも正確なノード選択が保証されます。
以上がXML 名前空間は「SelectSingleNode」にどのような影響を与えますか?またノードを正しく選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。