2012-11-28 129 views

回答

0

公共无效字符(字符[] 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));
}
}
}

+0

这是不可靠的。许多SAX解析器实现将字符数据分成多个事件,特别是当文本包含字符实体引用时。例如,“a&b”被编码为“a”,并且在许多情况下将作为至少三个字符()事件发送:“a”,“&”,“b”。 –

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); 
} 
相关问题