我正在尝试根据给定的 xpath 提取内容。当我只想提取一个元素时,没有问题。当我有一个与该 xpath 匹配的项目列表时,我会得到节点列表,并且可以提取值。
但是,有几个彼此相关的项目形成一个组,并且该组会重复自身。
我可以做的一种方法是获取所有此类组的父节点的节点列表,然后应用基于 SAX 的解析技术来提取信息。但这会引入特定于模式的编码。我想让它变得通用。 例如。
<html><body>
<!--... a lot divs and other tags ... -->
<div class="divclass">
<item>
<item_name>blah1</item_name>
<item_qty>1</item_qty>
<item_price>100</item_price>
</item>
</div>
<div class="divclass">
<item>
<item_name>blah2</item_name>
<item_qty>2</item_qty>
<item_price>200</item_price>
</item>
</div>
<div class="divclass">
<item>
<item_name>blah3</item_name>
<item_qty>3</item_qty>
<item_price>300</item_price>
</item>
</div>
</body></html>
我可以轻松地为这个 xml 编写代码,但不能编写可以解析任何给定规范的通用代码。
我应该能够从上面创建attribute-value
的map
的列表
。
有人试过这个吗?
编辑 输入 xpath 列表:
1. "html:div[@class='divclass']/item/item_name"
2. "html:div[@class='divclass']/item/item_qty"
3. "html:div[@class='divclass']/item/item_price"
简单文本的预期输出:
item_name:blah1;item_qty:1;item_price:100
item_name:blah2;item_qty:2;item_price:200
item_name:blah3;item_qty:3;item_price:300
这里的关键点是,如果我单独应用每个 xpath,它将垂直获取结果,即第一个将获取所有 item_names,第二个将获取所有 qtys。所以我会放弃这些片段中的相互关系。
希望这能满足我的要求。
谢谢 奈恩
最佳答案
我不确定我是否收到了您的问题,但听起来您想在 HTML 文档上使用 XPath。
要使用 XPath,所编写的 HTML 文档需要格式良好。 Java 有多种 HTML 解析器; this article比较其中 4 个。
HtmlCleaner似乎提供了你所追求的。它允许在“清理后的”HTML 文档上执行 XPath 的子集。显然它不支持完整的 XPath 表达式,请参阅 the documentation .
如果您需要比 HtmlCleaner 支持的更复杂的 XPath 表达式,您可能需要使用 javax.xml.xpath包含格式良好的 XHTML 文档的包。 JTidy可以将 HTML 文档转换为 XHTML 文档。
我希望这能回答您的问题。
关于java - 基于 XPATH 的 html 页面内容提取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3363661/