我可以得到 John、B 和 12。childNodeLst.item(k).getTextContent()
但是我将如何获得姓名、等级和年龄?在这个 xml
<students>
<student>
<name>John</name>
<grade>B</grade>
<age>12</age>
</student>
</students>
我可以得到 John、B 和 12。childNodeLst.item(k).getTextContent()
但是我将如何获得姓名、等级和年龄?在这个 xml
<students>
<student>
<name>John</name>
<grade>B</grade>
<age>12</age>
</student>
</students>
看起来你问的是 DOM,而不是 SAX。使用 DOM,您可以执行以下操作:
private String getChildNodeContent(Element parentNode, String tagName) {
NodeList children = parentNode.getElementsByTagName(tagName);
return children.length == 0 ? null : children.item(0).getTextContent();
}
...
Element student = (Element) childNodeList.item(k);
String name = getChildNodeContent(student, "name");
String grade = getChildNodeContent(student, "grade");
String age = getChildNodeContent(student, "age");
在 SAX 中,您必须通过查找您关心的开始/结束标签来观察 startElement() 和 endElement(),并捕获 characters() 事件以捕获文本。
private StringBuilder buffer = new StringBuilder();
public void startElement(String uri, String lname, String qname, Attributes atts) {
buffer.setLength(0);
}
public void endElement(String uri, String lname, String qname) {
String tag = context.pop();
String contents = buffer.toString();
// Do something interesting with 'contents' for the given tag.
buffer.setLength(0);
}
public void characters(char[] ch, int start, int len) {
buffer.append(ch, start, len);
}
public void characters(char[] ch, int start, int length) throws SAXException {
if(preTag!=null){
String content = new String(ch,start,length);
if("name".equals(preTag)){
student.setName(content);
}else if("age".equals(preTag)){
student.setAge(Float.parseFloat(content));
}
}
}