C# XPath 不选择某些子节点
C# XPath not selects some child nodes
我正在尝试使用 XPath 表达式:.//*[@class='newsContent newsClosed']/b
,但它不起作用,总是 returns 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
.
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();
有关演示,请参阅 this fiddle。
我正在尝试使用 XPath 表达式:.//*[@class='newsContent newsClosed']/b
,但它不起作用,总是 returns 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
.
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();
有关演示,请参阅 this fiddle。