我有一个非常简单的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语法错误?
提前致谢 .
最好的祝福 .