如何使用StAX XML解析器捕获属性事件? [英] How to catch Attribute-events with a StAX XML-parser?
本文介绍了如何使用StAX XML解析器捕获属性事件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我尝试使用StAX XML解析器解析XML文件.它给了我START_ELEMENT
和END_DOCUMENT
事件,但没有给我ATTRIBUTE
事件.如何使用StAX解析器接收ATTRIBUTE
事件?
I try to parse an XML file with a StAX XML-parser. It give me START_ELEMENT
and END_DOCUMENT
events but no ATTRIBUTE
events. How can I receive ATTRIBUTE
events with the StAX parser?
我的XML:
<?xml version="1.0" encoding="utf-8"?>
<posts>
<row name="Jonas"/>
<row name="John"/>
</posts>
我的StAX XML解析器:
My StAX XML-parser:
public class XMLParser {
public void parseFile(String filename) {
XMLInputFactory2 xmlif = (XMLInputFactory2) XMLInputFactory2.newInstance();
xmlif.setProperty(XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES, Boolean.FALSE);
xmlif.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, Boolean.FALSE);
xmlif.setProperty(XMLInputFactory.IS_COALESCING, Boolean.FALSE);
xmlif.configureForSpeed();
XMLStreamReader2 xmlr = (XMLStreamReader2)
xmlif.createXMLStreamReader(new FileInputStream(filename));
int eventType;
while(xmlr.hasNext()) {
eventType = xmlr.next();
switch(eventType) {
case XMLStreamConstants.START_ELEMENT:
if(xmlr.getName().toString().equals("row")) {
System.out.println("row");
}
break;
case XMLStreamConstants.ATTRIBUTE:
System.out.println("Attribute");
break;
case XMLStreamConstants.END_DOCUMENT:
System.out.println("END");
xmlr.close();
break;
}
}
}
public static void main(String[] args) {
XMLParser p = new XMLParser();
String filename = "data/test.xml";
p.parseFile(filename);
}
}
推荐答案
处于START_ELEMENT
状态时,可以获得属性.请参见XMLStreamReader
上的getAttribute*
方法:
You can obtain the attributes when you are in the START_ELEMENT
state. See the getAttribute*
methods on XMLStreamReader
: