C# で名前空間を持つ XML ノードを選択するときに問題が発生しました
次の構造の名前空間を含む XML ドキュメントを考えてみましょう:
<code class="language-xml"><?xml version="1.0" encoding="utf-8"?><project defaulttargets="Build" toolsversion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"><itemgroup><compile include="clsWorker.cs"></compile></itemgroup></project></code>
名前空間を指定せずに SelectSingleNode
メソッドを使用して Compile
ノードを取得しようとすると、null が返されます。
<code class="language-csharp">XmlDocument xmldoc = new XmlDocument(); xmldoc.LoadXml(Xml); XmlNode node = xmldoc.SelectSingleNode("//Compile"); // 返回null</code>
解決策: XmlNamespaceManager を使用します
ルート要素に名前空間がある場合に 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>
名前空間マネージャーを追加し、正しい名前空間プレフィックス (この場合は「msbld」) を指定すると、SelectSingleNode
メソッドは必要なノードを正常に見つけて返します。
以上がC# を使用して名前空間を持つ XML ノードを選択する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。