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();
}
}