java 循环取值 xml_java遍历读取xml文件内容

本文展示了如何使用Java的Axiom库和DOM解析器遍历并读取XML文件内容。通过创建XMLStreamReader和OMElement,文章详细解释了获取XML元素和其属性的步骤,同时给出了两种不同的遍历XML文件的示例代码。
摘要由CSDN通过智能技术生成

本文实例讲解了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(); // 读到

OMElement cre = doc.getFirstChildWithName(new QName("student")); //读到

OMElement cre1 = cre.getFirstChildWithName(new QName("id")); // 读到

System.out.println(cre1.getLocalName()+":"+cre1.getText());

cre1 = cre.getFirstChildWithName(new QName("name")); // 读到

System.out.println(cre1.getLocalName()+":"+cre1.getText());

cre1 = cre.getFirstChildWithName(new QName("age")); // 读到

System.out.println(cre1.getLocalName()+":"+cre1.getText());

cre1 = cre.getFirstChildWithName(new QName("sex")); // 读到

System.out.println(cre1.getLocalName()+":"+cre1.getText());

cre1 = cre.getFirstChildWithName(new QName("message")); // 读到

System.out.println(cre1.getLocalName()+":"+cre1.getText());

System.out.println("------------------------------1");

Iterator 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 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 ite1 = all.getChildElements();

while(ite1.hasNext()){

OMElement temp = ite1.next();

if(temp.getLocalName().equals("student")){

Iterator 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 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();

}

}

mac

12

33

male

hello world

silly

5

12

female

Mr. Jones

2

31

male

macy

2

40

female

tom

32

31

male

hello world

再分享一例:用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文件

YAYA

100

0

酷酷的雪娜瑞

OUOU

90

15

聪明的拉布拉多犬

QQ

100

20

Q仔

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值