中科院云平台架构师,专注于数字化、智能化,技术方向:云、Linux内核、AI、MES/ERP/CRM/OA、物联网、传感器、大数据、ML、微服务。
分类: Java
2013-04-27 16:07:02
这个是从JDK1.6支持的Stax解析,类似于Linux的pull,和sax的push有一些区别。但都是流模式。适用于J2ME。
http://hiyachen.cublog.cn
import java.io.FileNotFoundException;
import java.io.FileReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
public class StaxTest {
// 获得解析器
public static XMLStreamReader getStreamReader() {
// String xmlFile = StaxTest.class.getResource("/").getFile()+ "users.xml";
String xmlFile = "c:\\company.xml";
XMLInputFactory factory = XMLInputFactory.newInstance();
//XMLInputFactory factory = XMLInputFactory.newFactory(); // the all equal
try {
XMLStreamReader reader = factory.createXMLStreamReader(new FileReader(xmlFile));
return reader;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (XMLStreamException e) {
e.printStackTrace();
}
return null;
}
// 列出所有用户名称
public static void listNames() {
XMLStreamReader reader = StaxTest.getStreamReader();
// 遍历XML文档
try {
while (reader.hasNext()) {
int event = reader.next();
// 如果是元素的开始
if (event == XMLStreamConstants.START_ELEMENT) {
// 列出所有用户名称
if ("user".equalsIgnoreCase(reader.getLocalName())) {
System.out.println("Name:" + reader.getAttributeValue(null, "name"));
}
}
}
reader.close();
} catch (XMLStreamException e) {
e.printStackTrace();
}
}
/**
* @param args
*/
public static void main(String[] args) {
System.out.println("**********Start****************");
StaxTest.listNames();
System.out.println("**********End****************");
}
}
解析的文件:company.xml
参考文献:http://www.ibm.com/developerworks/cn/xml/x-stax1.html