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
投稿
猜你喜欢
- 一、Tomcat集成使用的成本越低,内部封装越复杂;1、依赖层级在SpringBoot框架的web依赖包中,引入的是内嵌Tomcat组件,基
- 委托定义类型,类型指定特定方法签名。可将满足此签名的方法(静态或实例)分配给该类型的变量,然后(使用适当参数)直接调用该方法,或将其作为参数
- 迭代器是一种模式,它可以使得对于序列类型的数据结构的遍历行为与被遍历的对象分离,即我们无需关心该序列的底层结构是什么样子的。只要拿到这个对象
- 1.基本语法key: value;kv之间有空格大小写敏感使用缩进表示层级关系缩进不允许使用tab,只允许空格缩进的空格数不重要,只要相同层
- 本文通过JavaMailSender实现邮箱注册验证中遇到的问题开始着手,给大家详细分析了其原理以及问题的解决办法。使用邮箱注册验证,我们需
- 网络办公正逐渐成为常态,无纸化办公也是一个潮流,这二者需要电子签章,最简单的方法就是在纸上盖一个章然后扫描成电子图片文件,最后在你的系统加载
- Jenkins 关闭和重启我们用jar -jar jenkins.war来启动jenkins服务器,那么我们如何关闭或者重启jenkins服
- 前言在我们的日常的编程当中,并发是始终离不开的主题,而在并发多线程当中,线程池又是一个不可规避的问题。多线程可以提高我们并发程序的效率,可以
- 一、准备工作和传统 CRUD 一样,实现对员工信息的增删改查。①搭建环境添加相关依赖web.xmlspringmvc.xml②准备实体类pu
- 前言众所周知,Struts2是个非常优秀的开源框架,我们能用Struts2框架进行开发,同时能快速搭建好一个Struts2框架,但我们是否能
- 一、将已经编译后的java中Class文件进行打包;打包命令JAR 如:将某目录下的所有class文件夹全部进行打包处理;使用的命令:jar
- 配置文件m103替换为hdfs服务地址。要利用Java客户端来存取HDFS上的文件,不得不说的是配置文件hadoop-0.20.2/conf
- 使用wpf程序常常会出现一个问题,那就是内存占用过高,使用wpf的程序功能越复杂往往用着用着内存就本着90往上去了。一方面wpf本身是一个u
- 问题描述:服务器接收后台返回的报文时,提示java.lang.NegativeArraySizeException分析:这种异常返回的原因,
- 有时候在配置中心有些参数是需要修改的,这时候如何不重启而达到实时生效的效果呢?添加依赖<dependencies>
- mybatis if test判断入参的值1.第一种判断方式<if test=' requisition != null an
- 前言由于刚写项目不久,在写 web 后台接口时,经常会对前端传入的参数进行一些规则校验,如果入参较少还好,一旦需要校验的参数比较多,那么使用
- 数组array和集合的区别:(1) 数值是大小固定的,同一数组只能存放一样的数据。(2) java集合可以存放不固定的一组数据(3) 若程序
- 项目中用到用户定义运算公式进行就算的需求,这样需要进行字符串四则运算解析,下面提供字符串公式四则运算解析与计算工具类,需要的同学可参考。工具
- 一、Rxjava使用场景为了模拟实际场景,从wanandroid网站找了二个接口,如下:(对Wanandroid表示感谢!)public i