我能够通过childNodeLst.item(k).getTextContent()
获得John,B和12。但是我将如何获得名称,等级和年龄? 在该XML如何在java中获取sax xml中的标签名称
<students> <student> <name>John</name> <grade>B</grade> <age>12</age> </student> </students>
我能够通过childNodeLst.item(k).getTextContent()
获得John,B和12。但是我将如何获得名称,等级和年龄? 在该XML如何在java中获取sax xml中的标签名称
<students> <student> <name>John</name> <grade>B</grade> <age>12</age> </student> </students>
公共无效字符(字符[] CH,INT开始,INT长度)抛出的SAXException {
如果(preTag!= NULL){
字符串含量=新的String(CH ,开始,长度);
if(“name”.equals(preTag)){
student.setName(content); (“age”.equals(preTag)){
} else if(“age”.equals(preTag)){
student.setAge(Float.parseFloat(content));
}
}
}
它看起来像你问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()通过寻找你所关心的开始/结束标记,并捕捉人物去()事件来捕获文本。
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);
}
这是不可靠的。许多SAX解析器实现将字符数据分成多个事件,特别是当文本包含字符实体引用时。例如,“a&b”被编码为“a”,并且在许多情况下将作为至少三个字符()事件发送:“a”,“&”,“b”。 –