繁体   English   中英

C#XPath不选择某些子节点

[英]C# XPath not selects some child nodes

我正在尝试使用XPath表达式: .//*[@class='newsContent newsClosed']/b ,但是它不起作用,总是返回0个元素。

然后,我尝试更改.//*[@class='newsContent newsClosed']上的表达式,并且可以正常工作。

为什么第一个表达式不起作用?

我正在使用XmlDocument.SelectSingleNode来检索元素。

XHTML的一部分:

<div class="newsContent newsClosed">
    <b>some text that I need to take</b>
    <br />
    <p>
        text
    </p>
    <p>
        <b>text</b>
        <br />
        <b>text</b>
        <b>text</b>
    </p>
...

在FirePath中,两个表达式均正常运行。

假设这是XHTML,则需要指定元素的名称空间http://www.w3.org/1999/xhtml : http://www.w3.org/1999/xhtml

var resolver = new XmlNamespaceManager(new NameTable());

resolver.AddNamespace("html", "http://www.w3.org/1999/xhtml");

var result = doc.SelectSingleNode(
    ".//*[@class='newsContent newsClosed']/html:b", resolver);

我个人的喜好是完全放弃XPath并使用LINQ到XML:

XNamespace html = "http://www.w3.org/1999/xhtml";

var result = (string) doc.Descendants()
    .Where(element => (string) element.Attribute("class") == "newsContent newsClosed")
    .Elements(html + "b")
    .Single();

看到这个小提琴演示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM