Я использую Jericho HTML Parser для разбора некорректного HTML-кода. В частности, я пытаюсь получить все текстовые узлы, обработать текст и затем заменить его.
Я хочу пропустить определенные элементы из обработки. Например, я хочу пропустить все элементы и любой элемент с атрибутом class="noProcess". Итак, если у div есть class="noProcess", я хочу пропустить этот div и все дочерние элементы из обработки. Однако я хочу, чтобы эти пропущенные элементы возвращались обратно к выходу после обработки.
Jericho предоставляет итератор для всех узлов, но я не уверен, как пропустить полные элементы из итератора. Вот мой код:
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
? - person sanbhat   schedule 27.06.2013