java sax xml文件解析_java解析xml文件-DOM/SAX

java解析xml文件的两种方式

1:DOM

原理:把整个文档加载到内存,转化成dom树,之后应用程序可以随机的访问dom树的任何数据,灵活 快,但消耗内存

一个简单的xml

9ee6aa4a519da5fa168af46b1b7d9e01.png

使用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文档进行顺序扫描,有事件发生

输出结果:

2f8f0f837d3cc1753962ce21322f05b3.png

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

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值