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();
}
}
找到那个感觉 就算打开了那个脑洞
本文来自博客园,作者:写程序到老,转载请注明原文链接:https://www.cnblogs.com/angin-iit/p/14010569.html
浙公网安备 33010602011771号