如何更改Java中标签的HTML内容?例如:
before:
<html>
<head>
</head>
<body>
<div>text<div>**text**</div>text</div>
</body>
</html>
after:
<html>
<head>
</head>
<body>
<div>text<div>**new text**</div>text</div>
</body>
</html>
我尝试过 JTidy,但不支持getTextContent
。还有其他解决办法吗?
谢谢,我想解析没有格式良好的 HTML。我尝试了 TagSoup,但是当我有以下代码时:
<body>
sometext <div>text</div>
</body>
我想将“sometext”更改为“someAnotherText”,当我使用{bodyNode}.getTextContent()
它给了我:“sometext text”;当我使用setTextContet("someAnotherText"+{bodyNode}.getTextContent())
,并将这些结构序列化,结果是<body>someAnotherText sometext text</body>
, 没有<div>
标签。这对我来说是个问题。
除非您完全确定 HTML 有效且格式良好,否则我强烈建议使用 HTML 解析器,例如TagSoup http://www.ccil.org/~cowan/XML/tagsoup/, Jericho http://jericho.htmlparser.net/docs/index.html, NekoHTML http://www.apache.org/~andyc/neko/doc/html/, HTML解析器 http://htmlparser.sourceforge.net/等等,前两个对于解析任何类型的垃圾特别强大:)
例如,与HTML解析器 http://htmlparser.sourceforge.net/(因为实现很容易),使用visitor http://htmlparser.sourceforge.net/javadoc/org/htmlparser/visitors/package-summary.html,提供您自己的NodeVisitor http://htmlparser.sourceforge.net/javadoc/org/htmlparser/visitors/NodeVisitor.html:
public class MyNodeVisitor extends NodeVisitor {
public MyNodeVisitor() {
}
public void visitStringNode (Text string)
{
if (string.getText().equals("**text**")) {
string.setText("**new text**");
}
}
}
然后,创建一个Parser http://htmlparser.sourceforge.net/javadoc/org/htmlparser/Parser.html,解析HTML字符串并访问返回的节点列表:
Parser parser = new Parser(htmlString);
NodeList nl = parser.parse(null);
nl.visitAllNodesWith(new MyNodeVisitor());
System.out.println(nl.toHtml());
这只是实现这一点的一种方法,非常简单。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)