[英]Parse XML file with SAXParser
我是新手,所以为什么当我想在 StartElement() 中打印 NAME 元素的值时,对于所有 3 个元素,它都会打印 null?
class Test {
public static void main(String args[]) {
try {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser saxParser = factory.newSAXParser();
DefaultHandler handler = new DefaultHandler() {
public void startElement(String uri, String localName, String qName, Attributes attributes)
throws SAXException {
if (qName.equals("NAME")) {
String str = attributes.getValue("NAME");
System.out.println(str);
}
}
};
saxParser.parse(new InputSource(new StringReader(xmlString)), handler);
} catch (Exception e) {
e.printStackTrace();
}
}
static String xmlString = "<PHONEBOOK>" +
" <PERSON>" +
" <NAME>Joe Wang</NAME>" +
" <EMAIL>joe@yourserver.com</EMAIL>" +
" <TELEPHONE>202-999-9999</TELEPHONE>" +
" <WEB>www.java2s.com</WEB>" +
" </PERSON>" +
" <PERSON> " +
"<NAME>Karol</NAME>" +
" <EMAIL>karol@yourserver.com</EMAIL>" +
" <TELEPHONE>306-999-9999</TELEPHONE>" +
" <WEB>www.java2s.com</WEB>" +
" </PERSON>" +
" <PERSON>" +
" <NAME>Green</NAME>" +
" <EMAIL>green@yourserver.com</EMAIL>" +
" <TELEPHONE>202-414-9999</TELEPHONE>" +
" <WEB>www.java2s.com</WEB>" +
" </PERSON>" +
" </PHONEBOOK>";
}
您的 XML没有任何属性。 所以这:
String str = attributes.getValue("NAME");
System.out.println(str);
...永远不会打印任何东西。
您想通过外观打印出 NAME 元素的内容。 因此,当您在NAME 元素中时,您需要处理characters
事件。
顺便说一句,您必须使用 SAX 吗? 以我的经验,与使用类似 DOM 的 model 相比(例如使用JDOM或其他 API - 内置的有点痛苦),这是一种痛苦。
如果您控制 XML,另一种方法是开始使用属性:
<PERSON NAME="Joe Wang"
EMAIL="joe@yourserver.com"
TELEPHONE="202-999-9999"
WEB="www.java2s.com" />
然后,您可以在获得PERSON
元素时使用attributes.getValue("NAME")
。
那是因为您试图从<NAME>
元素(没有任何属性)中读取属性。
String str = attributes.getValue("NAME");
要读取<NAME>
元素的内容,您必须覆盖DefaultHandler
的characters (char ch[], int start, int length)
方法并显示所有返回的ch[]
(字符数组)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.