博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
节点遍历测试dom4j创建、修改、遍历XML
阅读量:6678 次
发布时间:2019-06-25

本文共 7234 字,大约阅读时间需要 24 分钟。

发一下牢骚和主题无关:

    java项目概览:

    

 

    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 = "
" // + "
" // + "
" // + "
张三
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
    每日一道理
青春是用意志的血滴和拼搏的汗水酿成的琼浆——历久弥香;青春是用不凋的希望和不灭的向往编织的彩虹——绚丽辉煌;青春是用永恒的执著和顽强的韧劲筑起的一道铜墙铁壁——固若金汤。

    

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() + "》》》》》》");   }}

    

 

 

文章结束给大家分享下程序员的一些笑话语录: 人在天涯钻,哪儿能不挨砖?日啖板砖三百颗,不辞长做天涯人~

转载地址:http://cnyao.baihongyu.com/

你可能感兴趣的文章
linux 环境变量
查看>>
indexOf函数
查看>>
华为云SQLServer软硬件升级,推动性能全面提升
查看>>
家长会PPT,老师必备
查看>>
Linux 下日志管理工具(rotatelogs/logrotate/cronolog)
查看>>
flex 动态画线
查看>>
linux下导入、导出mysql数据库命令
查看>>
linux bonding配置(一)
查看>>
KeyMob-移动广告聚合平台-安卓、苹果应用推广
查看>>
【华为OJ】201301 JAVA 题目0-1级 将数组分为相等的两组
查看>>
WKT
查看>>
Docker容器学习梳理--SSH方式登陆容器
查看>>
Linux驱动开发___helloWorld模块编译
查看>>
NIO(三):缓冲区 Buffer
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
java设计模式-工厂模式
查看>>
微信小程序开发--从px到rpx:
查看>>
Mysql常用命令行大全
查看>>
Nginx安全配置研究
查看>>