Теперь, когда вы получили элемент, пойдем дальше и выберем его данные при помощи characters(). Взглянем на сигнатуру этого метода:
public void characters(char[] ch, int start, int length)
Заметьте, что нигде в методе нет информации о том, частью какого элемента являются эти символы. Если вам нужна такая информация, вы должны сохранять ее. В этом примере добавлены переменные для сохранения информации о текущем элементе и вопросе. (Тут также удалено много лишней информации, которая отображалась.)
Заметьте две важные вещи:
Это всегда учитывается проверяющим парсером.
... public void printIndent(int indentSize) { for (int s = 0; s < indentSize; s++) { System.out.print(" "); } } String thisQuestion = ""; String thisElement = "";
public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException { if (qName == "response") { System.out.println("User: " + atts.getValue("username")); } else if (qName == "question") { thisQuestion = atts.getValue("subject"); } thisElement = qName;
} public void endElement(String namespaceURI, String localName, String qName) throws SAXException { thisQuestion = ""; thisElement = "";
} public void characters(char[] ch, int start, int length) throws SAXException { if (thisElement == "question") { printIndent(4); System.out.print(thisQuestion + ": "); System.out.println(new String(ch, start, length)); } }
...