[英]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.