使用 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 操作。
以上是将 SelectSingleNode 与 XmlDocument 结合使用时如何解决命名空间冲突?的详细内容。更多信息请关注PHP中文网其他相关文章!