java解析xml文件的两种方式
1:DOM
原理:把整个文档加载到内存,转化成dom树,之后应用程序可以随机的访问dom树的任何数据,灵活 快,但消耗内存
一个简单的xml
使用java解析
//builder工厂
DocumentBuilderFactory factory =DocumentBuilderFactory.newInstance();try{//builder
DocumentBuilder builder =factory.newDocumentBuilder();//解析xml文档
Document doc = builder.parse("src/xmls/demo.xml");//根据标签名得到元素
NodeList list = doc.getElementsByTagName("student");//因为只有一个student 所以获取第一个//Node node=list.item(0);//element继承自node
Element student = (Element) list.item(0);//第一个元素//姓名
Element name = (Element) student.getElementsByTagName("姓名").item(0);
String nameValue=name.getFirstChild().getNodeValue();//年龄
Element age = (Element) student.getElementsByTagName("age").item(0);
String ageValue=age.getFirstChild().getNodeValue();
System.out.println(ageValue);//性别
Element sex = (Element) student.getElementsByTagName("sex").item(0);
String sexValue=sex.getFirstChild().getNodeValue();
String attib= sex.getAttribute("id");
System.out.println(sexValue);
System.out.println(attib);
}catch(Exception e) {
e.printStackTrace();
}
节点 属性 文本 都可以拿到了,复杂的xml也是使用这么几个方法。
2. sax
只能read 不能edit 相对于DOM方式来说 不会占用太多的内存, 对xml文档进行顺序扫描,有事件发生
输出结果:
public class SaxDemo extends DefaultHandler {
@Override
public void startDocument() throws SAXException {
System.out.println("文档开始。。。");
}
@Override
public void endDocument() throws SAXException {
System.out.println("文档结束。。。");
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
System.out.println("元素开始。。"+qName);
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
System.out.println("元素结束。。。"+qName);
}
/**
* 文本结点
* @param ch
* @param start
* @param length
* @throws SAXException
*/
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
System.out.println(new String(ch,start,length));
}
public static void main(String[] args) {
SAXParserFactory factory =SAXParserFactory.newInstance();
SAXParser parser= null;
try {
parser = factory.newSAXParser();
try {
parser.parse("src/xmls/demo.xml",new SaxDemo());
} catch (IOException e) {
e.printStackTrace();
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}
}