У меня действительно странная ситуация, когда мой SAX ContentHandler передает неверные атрибуты XMLReader. Анализируемый документ - это UTF-8 с многобайтовыми символами внутри атрибутов XML. Кажется, что эти атрибуты накапливаются при каждом вызове моего обработчика. Поэтому вместо последовательной передачи они объединяются со значением предыдущего узла.
Вот пример, который демонстрирует это, используя общедоступные данные (Википедия).
public class MyContentHandler extends org.xml.sax.helpers.DefaultHandler {
public static void main(String[] args) {
try {
org.xml.sax.XMLReader reader = org.xml.sax.helpers.XMLReaderFactory.createXMLReader();
reader.setContentHandler(new MyContentHandler());
reader.parse("http://en.wikipedia.org/w/api.php?format=xml&action=query&list=allpages&apfilterredir=redirects&apdir=descending");
} catch (Exception ex) {
ex.printStackTrace();
}
}
public void startElement(String uri, String localName, String qName, org.xml.sax.Attributes attributes) {
if ("p".equals(qName)) {
String title = attributes.getValue("title");
System.out.println(title);
}
}
}
Обновление: Этот полный пример выдает (извинения за любые кантонские спикеры за вульгарный вывод):
?
??
???
????
?????
??????
???????
????????
?????????
??????????
Кто-нибудь знает, что происходит и как это исправить? То, что возвращается в документе, не соответствует тому, что происходит, когда я отлаживаю этот фрагмент.