【发布时间】:2019-02-07 19:49:52
【问题描述】:
我正在尝试使用 HtmlAgilityPack 获取 HTML 文件的特定部分。
输入 HTML 文件(简化和清理):
<html>
<head>
</head>
<body>
<section>
<div>
</div>
</section>
<section>
<div>
</div>
Line 1
Line 2 - Text here
Line 3
<div>
</div>
</section>
</body>
</html>
这是我的代码:
Dim getPage As HtmlDocument = webGet.Load(Uri)
Dim AllTextLines As HtmlNodeCollection = getPage.DocumentNode.SelectNodes("/html/body/section[2]/text()")
Dim SecondTextLine As HtmlNodeCollection = getPage.DocumentNode.SelectNodes("/html[1]/body[1]/section[2]/#text[2]")
设置SecondTextLine 的值失败并出现以下错误:
System.Xml.XPath.XPathException:表达式必须计算为节点集
我想得到的是:
- 仅包含“Line 2 - Text here”的行
- 一个部分中的所有文本都没有子元素(在我的例子中是
<div>),但作为一个节点,一个包含所有文本的字符串。
我该怎么做?
编辑:
我再次添加了 XPath 标记,因为返回的错误直接来自 System.Xml.XPath.XPathException,而不是来自 HtmlAgilityPack。
【问题讨论】:
-
它遵循基本的 xml 架构,因此 xml 序列化可能值得研究
-
你能澄清一下吗?在项目 1. 中,会导致仅包含 2 而不是 1 或 3 的行的逻辑是什么?在项目 2. 中,您的部分有两个子
<div>元素,那么您为什么要从该部分中获取任何文本?这似乎与All text within a section without child elements相矛盾。 -
@djv 回答您的问题。 1。我每天都下载页面,第二行的内容对于判断要采取的进一步行动/页面内容至关重要。如前所述,输入 HMTL 被简化,但结构被保留。 2。这是摘要页面的结构,我对此完全没有影响。
标签: vb.net xpath html-agility-pack