如何在java中的sax xml解析中获取标记名称

时间:2012-11-28 09:02:20

标签: sax

我可以通过childNodeLst.item(k).getTextContent()获得John,B和12。但我将如何获得姓名,年级和年龄? 在这个xml中

<students> <student> <name>John</name> <grade>B</grade> <age>12</age> </student> </students>

2 个答案:

答案 0 :(得分:2)

看起来你问的是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);
}

答案 1 :(得分:0)

public void characters(char [] ch,int start,int length)抛出SAXException {
        如果(preTag!= NULL){
            String content = new String(ch,start,length);
            如果( “名” .equals(preTag)){
                student.setName(内容);
            } else if(“age”.equals(preTag)){
                student.setAge(Float.parseFloat(内容));
            }
        }
    }