java - 如何使用正则表达式通过类名构建 HTML DOM 元素的选择器

标签 java jquery html regex

我有一个问题。如果我这里有一个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/

相关文章:

jquery - 将 child 附加到具有相同类名的不同元素

java - Android 日历事件问题

java - Java 9 中不推荐使用 Observer。我们应该使用什么来代替它?

javascript - 鼠标滚轮多次触发

javascript - 每次在输入中输入新字符时更新查询

javascript - 在特定输入上启用单选按钮

java - 使用JSch使用多线程下载文件

java - Observable|观察者模式的基本实现

javascript - 帮助使用 javascript Submit() 函数将表单提交到 JQuery 脚本

javascript - 使用 CSS/JS Firefox 问题翻转卡片