我有一个HTML文件:
<div>
DIV1
<div>
DIV2
<div>
DIV3
</div>
</div>
</div>
&#13;
我想解析那个HTML。但是,我不想将整个解析的HTML作为字符串:
DIV1 DIV2 DIV3
我想逐个元素地获取值,但没有重复。我的意思是我不想要那个:
当你得到第一个div的值时,它是:
DIV1 DIV2 DIV3
秒的div值:
DIV2 DIV3
第三个div的值:
DIV3
我不想要的结果是:
DIV1 DIV2 DIV3
DIV2 DIV3
DIV3
我想要那个结果:
DIV1
DIV2
DIV2
我会对他们应用一些程序,我也不想要重复的值。我想使用Java解析器来解决我的问题。我考虑过使用Jsoup,但是在使用它时会解析整个HTML。
答案 0 :(得分:0)
听起来您想为HTML文档中的所有文本节点执行pre order depth first search。幸运的是,大多数解析库(包括XML库)都会按顺序为所有节点提供迭代器。
我建议您使用Jericho并致电getNodeIterator(),然后检查它是否为文本节点,是否将其打印出来。 Nootice链接有示例代码,但为了方便起见,我会将其粘贴到此处:
for (Iterator<Segment> nodeIterator=segment.getNoteIterator(); nodeIterator.hasNext();) {
Segment nodeSegment=nodeIterator.next();
if (nodeSegment instanceof Tag) {
Tag tag=(Tag)nodeSegment;
// HANDLE TAG
// Uncomment the following line to ensure each tag is valid XML:
// writer.write(tag.tidy()); continue;
} else if (nodeSegment instanceof CharacterReference) {
CharacterReference characterReference=(CharacterReference)nodeSegment;
// HANDLE CHARACTER REFERENCE
// Uncomment the following line to decode all character references instead of copying them verbatim:
// characterReference.appendCharTo(writer); continue;
} else {
// HANDLE PLAIN TEXT
}
// unless specific handling has prevented getting to here, simply output the segment as is:
//writer.write(nodeSegment.toString());
}
在// HANDLE CHARACTER REFERENCE
和// HANDLE PLAIN TEXT
中,您要添加字符串附加代码。