我有一个问题。如果我这里有一个html文件。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title> New Document </title>
<meta name="Generator" content="EditPlus">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
</head>
<body>
<h1>Welcome to My Homepage</h1>
<p class="intro">My name is Donald.</p>
<h1 class="intro"><p class="important">Note that this is an important paragraph.</p>
</h1>
<div class="intro important"><p class="apple">I live in apple.</p></div>
<div class="intro important">I like apple.</p></div>
<p>I live in Duckburg.</p>
</body>
</html>
现在我想通过类名获取 html 元素。 如果类名是“.intro”,则应返回:
My name is Donald.
<p class="important">Note that this is an important paragraph.</p>
如果类名是“.intro.important”,它应该返回:
Note that this is an important paragraph.
如果类名是“.intro.important>.apple”,则应返回:
I live in apple.
我知道jquery有class selector这个功能,但是现在我想实现这个功能。 我可以使用 java regexp 来做到这一点吗?看来类名是单个字符串就可以了。但如果类名有子类名,就会变得困难。 还有一个问题,java能否获取html的dom结构?
最佳答案
You can't parse [x]HTML with RegEx
就这么简单,RegExp 并不是为了涵盖 XML 的完整语法而构建的,不同的工作需要使用不同的工具。
CSS 选择器不易使用
不幸的是,CSS 选择器解析器还不是(据我所知)DOM 解析器的一部分,因此您需要使用 XPath 解析器来实现与 CSS 选择器相同的功能。
然而,有一些项目,例如 jquery4j.org,将 jQuery(+ 小部件)移植到 Java,但它们没有将 CSS 选择器引入表中,而是带来了更多内容,我不确定您是否真的需要所有这些。
XPath 选择器作为 CSS 选择器的替代品
Java 的 DOM 解析器 + XPath 解析器是最好的方法。 DOM 解析器将 HTML 结构读取并加载为 DOM 对象,而 XPath 解析器使用(它自己的不同类型的选择器)在 DOM 中查找对象。
但要小心,不要向 DOM 解析器提供大量 HTML 代码(整个页面),除非您确实需要它来筛选所有内容。如果您有一小段字符串来隔离 HTML 中显示信息的目标区域,那么最好使用 DOM。这是因为 DOM 解析器非常消耗内存。
关于java - 如何使用正则表达式通过类名构建 HTML DOM 元素的选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24450483/