首页 > 编程 > Java > 正文

java遍历读取xml文件内容

2019-11-26 14:40:14
字体:
来源:转载
供稿:网友

本文实例讲解了java遍历读取xml文件内容的详细代码,分享给大家供大家参考,具体内容如下

package test; import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.util.Iterator; import javax.xml.namespace.NamespaceContext;import javax.xml.namespace.QName;import javax.xml.stream.XMLInputFactory;import javax.xml.stream.XMLOutputFactory;import javax.xml.stream.XMLStreamException;import javax.xml.stream.XMLStreamReader;import javax.xml.stream.XMLStreamWriter; import org.apache.axiom.om.OMAbstractFactory;import org.apache.axiom.om.OMAttribute;import org.apache.axiom.om.OMComment;import org.apache.axiom.om.OMContainer;import org.apache.axiom.om.OMDataSource;import org.apache.axiom.om.OMDocType;import org.apache.axiom.om.OMDocument;import org.apache.axiom.om.OMElement;import org.apache.axiom.om.OMException;import org.apache.axiom.om.OMFactory;import org.apache.axiom.om.OMNamespace;import org.apache.axiom.om.OMProcessingInstruction;import org.apache.axiom.om.OMSourcedElement;import org.apache.axiom.om.OMText;import org.apache.axiom.om.OMXMLParserWrapper;import org.apache.axiom.om.impl.builder.StAXOMBuilder;import org.xml.sax.helpers.XMLReaderFactory; public class Axiomtest { public static void main(String[] args) throws FileNotFoundException, Throwable {//  read xml    FileInputStream xmlFile = new FileInputStream("line-item2.xml");    XMLStreamReader parser = XMLInputFactory.newInstance().createXMLStreamReader(xmlFile);     // 还需要StAXOMBuilder对象    StAXOMBuilder builder = new StAXOMBuilder(parser);        OMElement doc = builder.getDocumentElement();   //  读到<fool></fool>            OMElement cre = doc.getFirstChildWithName(new QName("student")); //读到<student>        OMElement cre1 = cre.getFirstChildWithName(new QName("id")); //  读到<id></id>    System.out.println(cre1.getLocalName()+":"+cre1.getText());    cre1 = cre.getFirstChildWithName(new QName("name"));    //  读到<name></name>    System.out.println(cre1.getLocalName()+":"+cre1.getText());        cre1 = cre.getFirstChildWithName(new QName("age"));   //  读到<age></age>    System.out.println(cre1.getLocalName()+":"+cre1.getText());          cre1 = cre.getFirstChildWithName(new QName("sex"));   //  读到<sex></sex>    System.out.println(cre1.getLocalName()+":"+cre1.getText());        cre1 = cre.getFirstChildWithName(new QName("message"));   //  读到<sex></sex>    System.out.println(cre1.getLocalName()+":"+cre1.getText());        System.out.println("------------------------------1");    Iterator<OMElement> iter = doc.getChildElements();    while(iter.hasNext()){      OMElement temp = iter.next();      System.out.println("====================");      System.out.println(temp.getLocalName());//      System.out.println(temp.getText());       if(temp.getLocalName().equals("student")){        Iterator<OMElement> iter1 = temp.getChildElements();        System.out.println("----------------");        while(iter1.hasNext()){          OMElement temp1 = iter1.next();                    System.out.println(temp1.getLocalName()+":"+temp1.getText());        }      }    }    System.out.println("!!!!!!!!!!!!!");    FileInputStream file = new FileInputStream("line-item2.xml");    XMLStreamReader read = XMLInputFactory.newInstance().createXMLStreamReader(file);    StAXOMBuilder sta = new StAXOMBuilder(read);    OMElement all = sta.getDocumentElement();    Iterator<OMElement> ite1 = all.getChildElements();    while(ite1.hasNext()){      OMElement temp = ite1.next();      if(temp.getLocalName().equals("student")){       Iterator<OMElement> ite2 = temp.getChildElements();       while(ite2.hasNext()){         OMElement temp1 = ite2.next();         System.out.println(temp1.getLocalName()+":"+temp1.getText());      }         }   }    //    write xml        OMFactory factory = OMAbstractFactory.getOMFactory();        //建立doc节点,doc节点会和下面的root节点合并    OMDocument dod = factory.createOMDocument();        //建立root节点    OMElement root = factory.createOMElement("root","","");    OMElement add = factory.createOMElement("dabi","","");    //建立两个普通节点    OMElement stu = factory.createOMElement("student","","");    stu.addChild(factory.createOMText("mac"));     OMElement tea = factory.createOMElement("teacher","","");    tea.addChild(factory.createOMText("silly"));        //构建树,将两个普通节点连到root节点上    root.addChild(stu);    root.addChild(tea);    //构建树,将root节点连到doc节点上    dod.addChild(root);        // 构建writer做输出器    XMLStreamWriter writer = XMLOutputFactory.newInstance().createXMLStreamWriter(        new FileOutputStream("2.xml"));    root.serialize(writer); // cache on    writer.flush();        FileInputStream xmlFile1 = new FileInputStream("2.xml");    XMLStreamReader parser1 = XMLInputFactory.newInstance().createXMLStreamReader(xmlFile1);        StAXOMBuilder builder1 = new StAXOMBuilder(parser1);    OMElement doc1 = builder1.getDocumentElement();        Iterator<OMElement> iter1 = doc1.getChildElements();    while(iter1.hasNext()){      OMElement temp = iter1.next();      System.out.println("====================");      System.out.println(temp.getLocalName()+":"+temp.getText());    }         System.out.println("!!!!!!!!");     OMFactory omf = OMAbstractFactory.getOMFactory();//    OMDocument od = omf.createOMDocument();    OMElement root1 = omf.createOMElement("root","","");    OMElement name = omf.createOMElement("name","","");    OMElement sex = omf.createOMElement("sexy","","");    sex.addChild(omf.createOMText("man"));    name.addChild(omf.createOMText("dabi"));    root1.addChild(sex);    root1.addChild(name);//    od.addChild(root1);        XMLStreamWriter xmlw = XMLOutputFactory.newInstance().createXMLStreamWriter(new FileOutputStream("3.xml"));    root1.serialize(xmlw);        xmlw.flush(); }}
<?xml version="1.0" encoding="UTF-8"?><fool>  <student>    <name>mac</name>    <id>12</id>    <age>33</age>    <sex>male</sex>    <message>hello world</message>  </student>  <student>    <name>silly</name>    <id>5</id>    <age>12</age>    <sex>female</sex>  </student>  <teacher>    <name>Mr. Jones</name>    <id>2</id>    <age>31</age>    <sex>male</sex>  </teacher>  <student>    <name>macy</name>    <id>2</id>    <age>40</age>    <sex>female</sex>  </student>  <student>    <name>tom</name>    <id>32</id>    <age>31</age>    <sex>male</sex>  </student>  <message>hello world</message></fool>

再分享一例: 用JAVA读取XML文件

解析XML的步骤如下:

  •   1.创建DocumentBuilder工厂
  •   2.创建DocumentBuilder对象
  •   3.DocumentBuilder对象的parse方法得到Document对象
  •   4.Document对象的getElementsByTagName得到NodeList集合
  •   5.通过getFirstChild和getNextSibling进行遍历 

用到的包:

  • import javax.xml.parsers.*;
  • import org.w3c.dom.*;
  • import org.xml.sax.*;

用到的对象:

  • DocumentBuilderFactory:创建DocumentBuilder的抽象工厂
  • DocumentBuilder:可以从 XML 获取一个 Document
  • Document:提供供对文档数据的基本访问

用到的方法:

  • DocumentBuilder.parse(String)':将给定 URI 的内容解析为一个 XML 文档,并且返回一个新的 DOM Document对象
  • Document.getElementsByTagName(String)':返回具有给定标记名称的所有 Element 的 NodeList
  • Element.getAttribute(String)':通过名称获得属性值

下面来解析一个XML文件

import javax.xml.parsers.*; import org.w3c.dom.*; import org.xml.sax.*;  public class Test {   public static void main(String[] args)   {     DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();     try     {       DocumentBuilder db = dbf.newDocumentBuilder();       Document doc = db.parse("pet2.xml");        NodeList dogList = doc.getElementsByTagName("dog");       System.out.println("共有" + dogList.getLength() + "个dog节点");       for (int i = 0; i < dogList.getLength(); i++)       {         Node dog = dogList.item(i);         Element elem = (Element) dog;         System.out.println("id:" + elem.getAttribute("id"));         for (Node node = dog.getFirstChild(); node != null; node = node.getNextSibling())         {           if (node.getNodeType() == Node.ELEMENT_NODE)           {             String name = node.getNodeName();             String value = node.getFirstChild().getNodeValue();             System.out.print(name + ":" + value + "/t");           }         }         System.out.println();       }     }     catch (Exception e)     {       e.printStackTrace();     }   } } 

XML文件

<pets>   <dogs>     <dog id="1">            <name>YAYA</name>       <health>100</health>       <love>0</love>       <strain>酷酷的雪娜瑞</strain>     </dog>     <dog id="2">            <name>OUOU</name>       <health>90</health>       <love>15</love>       <strain>聪明的拉布拉多犬</strain>     </dog>   </dogs>   <penguins>     <penguin id="3">            <name>QQ</name>       <health>100</health>       <love>20</love>       <sex>Q仔</sex>           </penguin>       </penguins> </pets> 

以上就是本文的全部内容,希望对大家的学习有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表