我使用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