我使用Jericho HTML Parser解析一些畸形的HTML。特别是我试图获取所有文本节点,处理文本,然后将其替换。转换迭代到了以跳过索引循环对象
我想跳过从处理的具体内容。例如,我想跳过所有元素,以及任何具有属性class =“noProcess”的元素。所以,如果一个div的class =“noProcess”,那么我想跳过这个div和所有的孩子处理。但是,我希望这些跳过的元素在处理后返回到输出。
杰里科为所有节点的迭代器,但我不知道如何跳过从迭代器的全部元素。这里是我的代码:
private String doProcessHtml(String html) {
Source source = new Source(html);
OutputDocument outputDocument = new OutputDocument(source);
for (Segment segment : source) {
if (segment instanceof Tag) {
Tag tag = (Tag) segment;
System.out.println("FOUND TAG: " + tag.getName());
// DO SOMETHING HERE TO SKIP ENTIRE ELEMENT IF IS <A> OR CLASS="noProcess"
} else if (segment instanceof CharacterReference) {
CharacterReference characterReference = (CharacterReference) segment;
System.out.println("FOUND CHARACTERREFERENCE: " + characterReference.getCharacterReferenceString());
} else {
System.out.println("FOUND PLAIN TEXT: " + segment.toString());
outputDocument.replace(segment, doProcessText(segment.toString()));
}
}
return outputDocument.toString();
}
它看起来并不像使用ignoreWhenParsing()方法的工作,我作为解析器只是对待“忽略”元素为文本。我想,如果我可以将Iterator循环转换为for(int i = 0; ...)循环,我可能可以通过修改i来指向EndTag来跳过元素及其所有子元素然后继续循环....但不确定。
使用'continue'关键字怎么样? – sanbhat
我可以继续使用,但下一个细分将成为我想跳过的元素的下一个孩子。它的工作方式是迭代器返回所有分段。我需要的东西说:你想跳过的元素的EndTag在位置X.所以跳到位置X并继续 – user2287359