我有一个非常简单的html页面,看起来像这样:

(index.html的):

<html>
<head>
<title>Test</title>
</head>
<body bgcolor="white" text="black">
<center><h1>Test</h1></center>
<a href="/a.html">A</a>

<div class="masterWrapper">
<div class="headerWrapper">
<div class="headerLogo">

</div>
</div>
<div class="clear">
</div>
<div class="sliderWrapper">

</div>
<div class="clear">
</div>
<div class="contentWrapper">
<div class="rightColumn">
<h2>
Test <strong class="green">|</strong><strong>Test2</strong>?</h2>
</div>
</div>
</div>

</body>
</html>

和几乎相同的子页面:

(a.html):

<html>
<head>
<title>Test2</title>
</head>
<body bgcolor="white" text="black">
<center><h1>Test2</h1></center>

<div class="masterWrapper">
<div class="headerWrapper">
<div class="headerLogo">

</div>
</div>
<div class="clear">
</div>
<div class="sliderWrapper">

</div>
<div class="clear">
</div>
<div class="contentWrapper">
<div class="rightColumn">
<h2>
Test <strong class="green">|</strong><strong>Test2</strong>?</h2>
</div>
</div>
</div>
</body>
</html>

这里唯一的区别是第二页缺少 <a href="/a.html">A</a> .

我刮了上面的(使用Abot),现在发生了奇怪的事情,我正在尝试通过XPath为当前页面选择所有h2标签,如下所示:

page.HtmlDocument.DocumentNode.SelectNodes("//h2");

如果我在“index.html”上使用上面 - 它工作正常,但如果我使用相同的行从“a.html”获取节点 - 它返回NULL . 我还尝试了SelectNodes(“h2”),SelectNodes(“/ h2”),SelectNodes(“.// h2”)和SelectNodes(“./ h2”),但都返回NULL . 由Abot返回的内部html对于两个页面都是相同的(减去我上面提到的链接) .

如果我使用linq而不是XPath,像这样:

page.HtmlDocument.DocumentNode.DescendantNodes().Where(x => x.Name == tagNameMinusAttribute)

它在两个页面上都返回正确的值 - 为什么它不适用于XPath?这是HtmlAgilityPack中的一些错误,还是我的XPath语法错误?

提前致谢 .

最好的祝福 .