欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java遍历读取xml文件内容

程序员文章站 2024-03-31 19:51:22
本文实例讲解了java遍历读取xml文件内容的详细代码,分享给大家供大家参考,具体内容如下 package test; import java.io.fi...

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

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