java dom4j遍历xml_测试dom4j创建、修改、遍历XML

本文档展示了如何使用Java DOM4J库进行XML文件的创建、修改和遍历。通过创建XML文档,设置处理指令、注释和元素,然后遍历XML节点,演示了DOM4J的基本用法。此外,还提供了修改XML文件中特定节点属性和值的方法。
摘要由CSDN通过智能技术生成

java项目概览:

1363078276_6436.png

XmlManage.java

package com.jialin;

import java.io.File;

import java.io.FileWriter;

import java.io.IOException;

import java.util.HashMap;

import java.util.Iterator;

import java.util.List;

import java.util.Map;

import org.dom4j.Attribute;

import org.dom4j.Document;

import org.dom4j.DocumentException;

import org.dom4j.DocumentHelper;

import org.dom4j.Element;

import org.dom4j.io.OutputFormat;

import org.dom4j.io.SAXReader;

import org.dom4j.io.XMLWriter;

/**

* 测试DOM4J创建,修改,遍历XML

*

* @author jialin

*

*/

public class XmlManager {

public static void main(String[] args) {

XmlManager xmlManager = new XmlManager();

// 初始化xml文档

Document doc = null;

// 通过dom4j方法创建xml

// doc = xmlManager.createXml();

// XML字符串

// String strXMl = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"

// + "<?xml-stylesheet type=\"text/xsl\" href=\"students.xsl\"?>"

// + ""

// + "张三18"

// + "李四19";

// 通过字符串创建xml

// doc = xmlManager.createDocumentByString(strXMl);

// XMl输出路径

// String outputPath = "xml/Students.xml";

// 输出xml

// xmlManager.saveDocument(doc, outputPath);

// xml输入路径

String inputPath = "xml/Students.xml";

// 根据xml路径更改XML

//xmlManager.ModifyXml(inputPath);

// 根据xml路径获取doc

doc = xmlManager.getDocument(inputPath);

// 遍历XML

xmlManager.traversalDocumentByElementIterator(doc);

// xmlManager.traversalDocumentByVisitor(doc);

//xmlManager.traversalDocumentByElements(doc);

//xmlManager.traversalDocumentByselectNodes(doc, "/Students/student/name");

}

/**

* 获取XML文件

* @param inputPath

* @return

*/

public Document getDocument(String inputPath) {

// 输入文件

File inputXml = new File(inputPath);

SAXReader saxReader = new SAXReader();

Document document = null;

try {

document = saxReader.read(inputXml);

} catch (DocumentException e) {

e.printStackTrace();

}

return document;

}

/**

* 通过Dom4j方法创建xml文档

*

* @return

*/

public Document createXml() {

Document doc = DocumentHelper.createDocument();

// 创建ProcessingInstruction

Map inMap = new HashMap();

inMap.put("type", "text/xsl");

inMap.put("href", "students.xsl");

doc.addProcessingInstruction("xml-stylesheet", inMap);

// 增加根节点

Element studentsElement = doc.addElement("Students");

// 增加注释

studentsElement.addComment("Students Table");

// 增加子节点

Element stuElement = studentsElement.addElement("student");

// 增加属性

stuElement.addAttribute("stu", "001");

// 增加名称节点

Element nameElement = stuElement.addElement("name");

// 设置名称节点的值

nameElement.setText("张三");

// 增加年龄节点

Element ageElement = stuElement.addElement("age");

// 设置年龄节点的值

ageElement.setText("18");

// 同上

Element anotherStuElement = studentsElement.addElement("student");

anotherStuElement.addAttribute("stu", "002");

Element anotherNameElement = anotherStuElement.addElement("name");

anotherNameElement.setText("李四");

Element anotherAgeElement = anotherStuElement.addElement("age");

anotherAgeElement.setText("19");

return doc;

}

/**

* 通过字符串创建xml文档

* @param xmlStr

* @return

*/

public Document createDocumentByString(String xmlStr) {

Document doc = null;

try {

// 通过字符串转换直接构建xml文档

doc = DocumentHelper.parseText(xmlStr);

} catch (DocumentException e) {

e.printStackTrace();

}

return doc;

}

/**

* 修改xml

*

* @param inputXmlPath

*/

public void ModifyXml(String inputXmlPath) {

// 获取文件

File inputXml = new File(inputXmlPath);

try {

SAXReader saxReader = new SAXReader();

// 创建document

Document doc = saxReader.read(inputXml);

// 读取Students/student下所有具有属性stu的元素

List list = doc.selectNodes("/Students/student/@stu");

Iterator iter = list.iterator();

while (iter.hasNext()) {

Attribute attribute = (Attribute) iter.next();

if (attribute.getValue().equals("001"))

attribute.setValue("0001");

}

list = doc.selectNodes("/Students/student");

iter = list.iterator();

while (iter.hasNext()) {

Element element = (Element) iter.next();

Iterator iterator = element.elementIterator("name");

while (iterator.hasNext()) {

Element nameElement = (Element) iterator.next();

if (nameElement.getText().equals("张三"))

nameElement.setText("王五");

}

}

String outputPath = "xml/Students-Modified.xml";

saveDocument(doc, outputPath);

}

catch (DocumentException e) {

System.out.println(e.getMessage());

}

}

/**

* 将文档输出到文件保存,可指定格式化输出,可指定字符编码。

*

* @param document

* @param outputFile

*/

public void saveDocument(Document doc, String outputPath) {

// 输出文件

File outputFile = new File(outputPath);

try {

// 美化格式

OutputFormat format = OutputFormat.createPrettyPrint();

// 指定XML编码,不指定的话,默认为UTF-8

format.setEncoding("UTF-8");

XMLWriter output = new XMLWriter(new FileWriter(outputFile), format);

output.write(doc);

output.close();

} catch (IOException e) {

System.out.println(e.getMessage());

}

}

/**

* 普通方法遍历xml

*

* @param doc

*/

public void traversalDocumentByElementIterator(Document doc) {

// 获取根节点

Element root = doc.getRootElement();

// 枚举根节点下所有子节点

for (Iterator ie = root.elementIterator(); ie.hasNext();) {

System.out.println("======");

Element element = (Element) ie.next();

System.out.println(element.getName());

// 枚举属性

for (Iterator ia = element.attributeIterator(); ia.hasNext();) {

Attribute attribute = (Attribute) ia.next();

System.out.println(attribute.getName() + ":"

+ attribute.getData());

}

// 枚举当前节点下所有子节点

for (Iterator ieson = element.elementIterator(); ieson.hasNext();) {

Element elementSon = (Element) ieson.next();

System.out.println(elementSon.getName() + ":"

+ elementSon.getText());

}

}

}

/**

* 使用elements方法进行xml的读取,相当于条件查询,可以根据不同的节点,利用for循环查询该节点下所有的数据。

*

* @throws DocumentException

*/

public static void traversalDocumentByElements(Document doc) {

// 获取根节点

Element root = doc.getRootElement();

// 根据根节点,将根节点下 student中的所有数据放到list容器中。

List list = root.elements("student");

// 这种遍历方式,是jdk1.5以上的版本支持的遍历方式,嘿嘿试试

for (Object obj : list) {

Element el = (Element) obj;

System.out.println("----------"+el.getName()+"-----------");

// 获取name节点下所有的内容,存入listName容器中

List listName = el.elements("name");

// 获取age节点下所有的内容,存入age容器中

List listAge = el.elements("age");

for (int i=0;i

Element elname = (Element) listName.get(i);

// 获取name节点下的数据。

System.out.println(elname.getName() + ": " + elname.getText());

Element elage = (Element) listAge.get(i);

// 获取age节点下的数据。

System.out.println(elage.getName() + ": " + elage.getText());

}

}

}

/**

* 使用selectNodes读取xml文件

*

* @param args

* @throws DocumentException

*/

public static void traversalDocumentByselectNodes(Document doc,

String elementpath) {

// 使用selectNodes获取所要查询xml的节点。

List list = doc.selectNodes(elementpath);

// 遍历节点,获取节点内数据。

for (Iterator ie = list.iterator(); ie.hasNext();) {

Element el = (Element) ie.next();

System.out.println(el.getName() + ": " + el.getText());

}

}

/**

* 基于访问者模式遍历

*

* @param doc

*/

public void traversalDocumentByVisitor(Document doc) {

doc.accept(new MyVisitor());

}

}

MyVisitor.java

package com.jialin;

import org.dom4j.Attribute;

import org.dom4j.Element;

import org.dom4j.ProcessingInstruction;

import org.dom4j.VisitorSupport;

/**

* 定义自己的访问者类

*/

public class MyVisitor extends VisitorSupport {

/**

* 对于属性节点,打印属性的名字和值

*/

public void visit(Attribute node) {

System.out.println("attribute : " + node.getName() + " = "

+ node.getValue());

}

/**

* 对于处理指令节点,打印处理指令目标和数据

*/

public void visit(ProcessingInstruction node) {

System.out.println("PI : " + node.getTarget() + " "

+ node.getText());

}

/**

* 对于元素节点

* 如果包含文本内容,则打印元素的名字和元素的内容。如果不是,则只打印元素的名字

*/

public void visit(Element node) {

if (node.isTextOnly())

System.out.println("element : " + node.getName() + " = "

+ node.getText());

else

System.out.println("《《《《《《" + node.getName() + "》》》》》》");

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值