使用 XPath 和 asp.net XmlDocument 在命名空间中查找特定的子节点

本文关键字:查找 子节点 命名空间 XPath asp net XmlDocument 使用 | 更新日期: 2023-09-27 18:31:07

我有一个带有命名空间的 XmlDocument,我需要找到具有特定属性的元素的特定子元素。 我可以得到父级,我可以得到所有的子级,但我找不到一个 xpath 表达式来获取我想要的元素 (img)。 我可以遍历子级,只找到 img 元素,但我真的很想只用一个 xpath 表达式找到它。

第一个 SelectNode 给了我所有带有 class='distinct ' 的跨度子项。 我只想要 img 元素。第二个选择返回 0 个节点。

如果表达式或 xml 中不存在命名空间,则第二个选择将返回 img 元素。

.XML:

<p xmlns="blorf">
  <span class="distinct" >
    <img alt="" src="eq_54.png"/>
    <span class="other-span">
        <inner xmlns="scrubs">
            <x1/>
        </inner>
    </span>
  </span>
</p>

法典:

       ...
       doc.LoadXml(_xml);
        XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
        nsmgr.AddNamespace("a", "blorf");
        XmlNodeList list =  doc.SelectNodes("//a:span[@class='distinct']/*",nsmgr);
        Console.WriteLine("count is " + list.Count);
        list = doc.SelectNodes("//a:span[@class='distinct']/img", nsmgr);
        Console.WriteLine("count is " + list.Count);

使用 XPath 和 asp.net XmlDocument 在命名空间中查找特定的子节点

使用 list = doc.SelectNodes("//a:span[@class='distinct']/a:img", nsmgr); 即可取回img节点。

这个答案中的一些解释