java读取xml文件代码_JAVA解析XML文件

XML文档解析的方式4种

1.SAX解析XML文件

2.DOM解析XML文件

3.JDOM解析XML文件

4.DOM4J解析XML文件

注意:XML文件的解析格式有两种:SAX解析和DOM解析(DOM , JDOM , DOM4J )

下面就介绍一下JDOM解析XML文件

步骤:

1.创建一个DOM解析器(文档生成器)工厂对象

2.通过工厂对象创建一个DOM解析器对象

3.解析文档

4.从内存中读取数据生成对象

特点:

1.基于树型结构,

2.通过解析器一次性把文档加载到内存中,所以会比较占用内存,

3.可以随机访问,更加灵活,适合web端开发.

public void SSSXML() throwsIOException, SAXException, ParserConfigurationException {//创建一个DOM解析器(文档生成器)工厂对象

DocumentBuilderFactory documentBuilderFactory =DocumentBuilderFactory.newInstance();//通过工厂对象创建一个DOM解析器对象

DocumentBuilder documentBuilder =documentBuilderFactory.newDocumentBuilder();

InputStream resourceAsStream =Thread.currentThread().getContextClassLoader().getResourceAsStream("com\\xml\\person.xml");//此代码完成后,整个XML文档已经被加载到内存中,以树状形式存储;

Document parse =documentBuilder.parse(resourceAsStream);//4.从内存中读取数据生成对象//获取节点名称为person的所有节点,返回节点集合.

NodeList personNodeList = parse.getElementsByTagName("person");

ArrayList persons = new ArrayList<>();

Person person= null;//循环读取

for (int i = 0; i < personNodeList.getLength(); i++) {

Node personNode=personNodeList.item(i);

person= newPerson();//获取节点属性值;

String personid = personNode.getAttributes().getNamedItem("personid").getNodeValue();

person.setPersonid(personid);//获取当前节点的所有子节点

NodeList childNodes =personNode.getChildNodes();for (int j = 0; j

Node item=childNodes.item(j);

String nodeName=item.getNodeName();if("name".equals(nodeName)){

person.setName(item.getFirstChild().getNodeValue());

}else if("address".equals(nodeName)){

person.setTel(item.getFirstChild().getNodeValue());

}else if("tel".equals(nodeName)){

person.setTel(item.getFirstChild().getNodeValue());

}else if("fax".equals(nodeName)){

person.setFax(item.getFirstChild().getNodeValue());

}else if("email".equals(nodeName)){

person.setEmail(item.getFirstChild().getNodeValue());

}

}

persons.add(person);

}

System.out.println("结果:");for(Person person1 : persons) {

System.out.println(person1);

}

}

DOM4J解析XML文件

步骤:

1.创建DOM4J解析器

2.解析文档

3.从内存中读取数据生成对象

特点:

1.基于树型结构

2.第三方组件

3.解析速度快,效率更高,使用JAVA中的迭代器进行数据读取,在web框架中使用较多,比如(Hibernate框架)

首先创建一个XML配置文件(解析这个文件需要导入dom4j-1.6.1.jar包,具体版本可能有新旧之分)

2019-07-222019-07-22

下面就用这个XML文件实现增删改查

1.查询

packagecn.kgc.dom4jtest;importorg.dom4j.Document;importorg.dom4j.DocumentException;importorg.dom4j.Element;importorg.dom4j.io.SAXReader;importjava.util.Iterator;public classTest {public static voidmain(String[] args) {//创建DOM4J解析器对象

SAXReader saxReader = newSAXReader();try{//读取xml文件,并生成document对象 现可通过document来操作文档

Document document = saxReader.read("src/info.xml");//获取到文档的根节点

Element rootElement =document.getRootElement();

System.out.println("根节点的名字是:" +rootElement.getName());//获取子节点列表

Iterator it =rootElement.elementIterator();while(it.hasNext()) {

Element fistChild=(Element) it.next();//System.out.println(fistChild.getName());//获取节点的属性值

System.out.println(fistChild.attribute("name").getValue());//获取子节点的下一级节点

Iterator iterator =fistChild.elementIterator();while(iterator.hasNext()) {

Element element=(Element) iterator.next();

System.out.println("\t" + element.attributeValue("name"));

}

}

}catch(DocumentException e) {

e.printStackTrace();

}

}

}

2.添加

packagecn.kgc.dom4jtest;importorg.dom4j.Document;importorg.dom4j.Element;importorg.dom4j.io.SAXReader;importorg.dom4j.io.XMLWriter;importjava.io.File;importjava.io.FileOutputStream;importjava.io.OutputStream;public classAddTest1 {/*** 添加节点操作

*@paramargs*/

public static voidmain(String[] args) {//创建DOM4J解析器对象

SAXReader saxReader = newSAXReader();try{

Document document= saxReader.read("src/info.xml");//获取到根节点

Element rootElement =document.getRootElement();//添加一个子节点

Element brand = rootElement.addElement("brand");//给当前节点添加属性

brand.addAttribute("name", "魅族");

Element type= brand.addElement("type");

type.addAttribute("name", "s16");

OutputStream os= new FileOutputStream(new File("src/info.xml"));

XMLWriter xmlWriter= newXMLWriter(os);

xmlWriter.write(rootElement);

xmlWriter.flush();

}catch(Exception e) {

e.printStackTrace();

}

}

}

3.修改

packagecn.kgc.dom4jtest;importorg.dom4j.Document;importorg.dom4j.Element;importorg.dom4j.io.SAXReader;importorg.dom4j.io.XMLWriter;importjava.io.File;importjava.io.FileOutputStream;importjava.util.Iterator;/*** 节点修改测试*/

public classUpdateTest {public static voidmain(String[] args) {//创建DOM4J解析器对象

SAXReader saxReader = newSAXReader();try{

Document document= saxReader.read("src/info.xml");//获取根节点

Element rootElement =document.getRootElement();

Iterator it=rootElement.elementIterator();while(it.hasNext()) {

Element element=(Element) it.next();

System.out.println(element.attributeValue("name"));if (element.attributeValue("name").equals("魅族")) {

Iterator iterator=element.elementIterator();while(iterator.hasNext()) {

Element type=(Element) iterator.next();if (type.attributeValue("name").equals("s16")) {

type.addAttribute("name", "16 pro");

}

}

}

}

XMLWriter xmlWriter= new XMLWriter(new FileOutputStream(new File("src/info.xml")));

xmlWriter.write(document);

xmlWriter.flush();

}catch(Exception e) {

e.printStackTrace();

}

}

}

4.删除

packagecn.kgc.dom4jtest;importorg.dom4j.Document;importorg.dom4j.Element;importorg.dom4j.io.SAXReader;importorg.dom4j.io.XMLWriter;importjava.io.File;importjava.io.FileOutputStream;importjava.util.Iterator;/*** 删除节点测试*/

public classDeleteTest {public static voidmain(String[] args) {

SAXReader saxReader= newSAXReader();try{

Document document= saxReader.read("src/info.xml");

Element rootElement=document.getRootElement();

Iterator iterator=rootElement.elementIterator();while(iterator.hasNext()) {

Element brand=(Element) iterator.next();if ("魅族".equals(brand.attributeValue("name"))) {//通过父节点来删除子节点

brand.getParent().remove(brand);

}

}

XMLWriter xmlwriter= new XMLWriter(new FileOutputStream(new File("src/info.xml")));

xmlwriter.write(document);

xmlwriter.flush();

}catch(Exception e) {

e.printStackTrace();

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值