bug*_*oft 2 html java tags jtidy
如何在Java中更改标记的HTML内容?例如:
之前:
<html>
<head>
</head>
<body>
<div>text<div>**text**</div>text</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
后:
<html>
<head>
</head>
<body>
<div>text<div>**new text**</div>text</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我尝试了JTidy,但它不支持getTextContent.还有其他解决方案吗?
谢谢,我想解析没有格式良好的HTML.我试过TagSoup,但是当我有这个代码时:
<body>
sometext <div>text</div>
</body>
Run Code Online (Sandbox Code Playgroud)
我希望将"sometext"更改为"someAnotherText",当我使用{bodyNode}.getTextContent()它时,它会给我:"sometext text"; 当我使用setTextContet("someAnotherText"+{bodyNode}.getTextContent())并序列化这些结构时,结果是<body>someAnotherText sometext text</body>,没有<div>标签.这对我来说是个问题.
除非你完全确定HTML是有效且格式良好的,否则我强烈建议使用HTML解析器,比如TagSoup,Jericho,NekoHTML,HTML Parser等,这两个首先特别强大,可以解析任何类型的废话:)
例如,使用HTML Parser(因为实现非常简单),使用访问者,提供您自己的NodeVisitor:
public class MyNodeVisitor extends NodeVisitor {
public MyNodeVisitor() {
}
public void visitStringNode (Text string)
{
if (string.getText().equals("**text**")) {
string.setText("**new text**");
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,创建一个Parser,解析HTML字符串并访问返回的节点列表:
Parser parser = new Parser(htmlString);
NodeList nl = parser.parse(null);
nl.visitAllNodesWith(new MyNodeVisitor());
System.out.println(nl.toHtml());
Run Code Online (Sandbox Code Playgroud)
这只是实现这一目标的一种方式,非常直接.
| 归档时间: |
|
| 查看次数: |
17082 次 |
| 最近记录: |