XMLStreamReader读取解析xml文件的一个例子
优点:这个占用内存小,不会一次性把整个文件加载到内存,不容易产生大对象
/**
* 解析xml文件样例代码
*/
public class Demo {
public static void main(String[] args) throws XMLStreamException {
XMLStreamReader xmlReader = null;
try {
String xmlFile = "src/main/resources/Data.xml";
xmlReader = XMLInputFactory.newFactory().createXMLStreamReader(new FileInputStream(xmlFile));
while(xmlReader.hasNext()){
int next = xmlReader.next();
if(next == XMLStreamConstants.START_ELEMENT){
if(xmlReader.getAttributeCount() >0){
System.out.println("tags: " + xmlReader.getLocalName());
String name = xmlReader.getAttributeValue(null, "name");
String age = xmlReader.getAttributeValue(null, "age");
String remark = xmlReader.getAttributeValue(null, "remark");
String elementText = xmlReader.getElementText();
if(elementText!=null && !elementText.isEmpty()){
System.out.println(elementText);
}
System.out.println("名字:"+name+",年龄: "+age+ " , remark: " + remark);
}else {
System.out.println("tags: " + xmlReader.getLocalName());
}
}else if(next == XMLStreamConstants.END_ELEMENT){
System.out.println("================= end,tags: " + xmlReader.getLocalName());
}else if(next == XMLStreamConstants.CHARACTERS){
System.out.println("Characters: \\nn "+xmlReader.getText());
}
}
}catch (Exception e){
System.out.println(e);
}finally {
if(xmlReader!=null){
xmlReader.close();
}
}
}
}
xml文件:
<?xml version="1.0" encoding="utf-8"?>
<Things>
<Man>
<Boy name="小明" age="15" remark="boy smart" />
</Man>
<Animal>
<Dog name="大黄" age="4" remark="smart dog" />
<Cat name="沙哈" age="2" remark="smart cat" />
</Animal>
<Body name="数字" remark="随机">
100000000000009;
100000000000001;
100000000000002;
100000000000003;
100000000000004;
100000000000005;
100000000000006;
</Body>
</Things>
代码简短,可以dubug看看。