软件编程
位置:首页>> 软件编程>> java编程>> java遍历读取xml文件内容

java遍历读取xml文件内容

作者:lry77  发布时间:2023-11-12 09:59:09 

标签:java,遍历,读取,xml

本文实例讲解了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>
0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com