body, table{font-family: 微软雅黑; font-size: 10pt}
table{border-collapse: collapse; border: solid gray; border-width: 2px 0 2px 0;}
th{border: 1px solid gray; padding: 4px; background-color: #DDD;}
td{border: 1px solid gray; padding: 4px;}
tr:nth-child(2n){background-color: #f8f8f8;}

//dom4j

exam.xml output.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<exam>
        <student idcard="111" examid="222">
                <name>张三</name>
                <location>沈阳</location>
                <grade>89</grade>
        </student>
        <student idcard="333" examid="444">
                <name>李四</name>
                <location>大连</location>
                <grade>97</grade>
        </student>
</exam>
<?xml version="1.0" encoding="utf-8"?>
<exam>
  <student idcard="111" examid="222">
    <name>张三</name> 
    <location>沈阳</location> 
    <grade>89</grade> 
    <sex>男</sex>
  </student> 
  <student idcard="333" examid="444">
    <name>李四</name> 
    <location>大连</location>
  </student> 
  <student idcard="5555" examid="999"/>
</exam>
Dom4j.java

/*   针对exam.xml文件使用dom4j完成入下操作:
                1,得到某个具体的节点内容
                2、修改某个元素节点的主体内容
                3、向指定元素节点中增加子元素节点
                4、向指定元素节点上增加同级元素节点
                5、删除指定元素节点
                6、遍历所有元素节点
                7、获取XML文件某元素属性
*/
//开头导入包省略

public class Dom4j {
        public static void main(String[] args) throws Exception{
               SAXReader reader=new SAXReader();
                Document document=reader.read("exam.xml");    //获取document对象
                //得到第一个人的姓名
                Element rootElement = document.getRootElement();
                Element firstStudent=rootElement.element("student");
                Element firstName=firstStudent.element("name");
                String firstNameText = firstName.getText();
                System.out .println(firstNameText);

//修改第二个人的grade为100
                List allStudentList = rootElement.elements();
                Element secondStudent=(Element)allStudentList.get(1);
                Element secGrade=secondStudent.element("grade");
                secGrade.setText("100");
//第一个学生增加性别 - 男
                Element firstStuSex= firstStudent.addElement("sex");
                firstStuSex.setText("男");
//根节点增加同级元素 一个新的student
                Element createnewElement = DocumentHelper.createElement("student");
                createnewElement.setAttributeValue("idcard", "5555");
                createnewElement.setAttributeValue("examid", "999");
                rootElement.add(createnewElement);
                //rootElement.addElement("student"); //第二种方式
//删除第二个学生的grade
                secGrade.detach();              //remove()也行

    
//遍历所有元素
                for(int i=0;i<allStudentList.size();++i){
                        Element tmpStu=(Element)allStudentList.get(i);
                        for(int j=0;j<tmpStu.elements().size();j++){
                                Element tmpChild=(Element)tmpStu.elements().get(j);
                                String str=tmpChild.getName();
                                String str1=tmpChild.getText();
                                System.out .println(str+"     "+str1);
                        }
                }
 //获取XML属性
                String xmlEncoding=document.getXMLEncoding();
                String UniquePath=document.getUniquePath();
                System.out .println(xmlEncoding+"     "+UniquePath);      //在当前目录
//标准的保存语句。
//dom4j写回文档会自动写换行方便观看
                OutputFormat format = OutputFormat.createPrettyPrint();   // 指定XML编码                 
                format.setEncoding("utf-8");
                XMLWriter writer = new XMLWriter(new FileOutputStream ("output.xml"),format);
                writer.write(document);
                writer.close();
        }
}

//XPath
exam.xml         output2.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<exam>
        <student idcard="111" examid="222">
                <name>张三</name>
                <location>沈阳</location>
                <grade>89</grade>
        </student>
        <student idcard="333" examid="444">
                <name>李四</name>
                <location>大连</location>
                <grade>97</grade>
        </student>
</exam>
<?xml version="1.0" encoding="utf-8"?>
<exam>
  <student idcard="111" examid="222">
    <name>张三</name> 
    <location>沈阳</location> 
    <grade>100</grade>
  </student> 
  <student idcard="333" examid="444">
    <name>李四</name> 
    <location>大连</location>
  </student>
</exam>
public class XPath {
    public static void main(String[] args) throws Exception{
        SAXReader reader = new SAXReader();
        Document document = reader.read("exam.xml");
        //得到第一个人的姓名
        Node firstStuNameNode=document.selectSingleNode("/exam/student/name");
        String firstStuName=firstStuNameNode.getText();
        System.out.println(firstStuName);
        //修改第二个人的grade为100
        Node firstStuGradeNode = document.selectSingleNode("/exam/student/grade");
        firstStuGradeNode.setText("100");
      //删除第二个学生的grade
        Node secStuNode=document.selectSingleNode("/exam/student[2]/grade");
        secStuNode.detach();
      //遍历所有元素
        List allNodes=document.selectNodes("/exam/*");
        for(int i=0;i<allNodes.size();++i){
                Element subNodes=(Element)allNodes.get(i);
                for(int j=0;j<subNodes.elements().size();++j){
                        String subName=((Element)subNodes.elements().get(j)).getName();
                        String subText=((Element)subNodes.elements().get(j)).getText();
                        System.out .println(subName+"   "+subText);
                }
        }
//标准的保存语句。
                      OutputFormat format = OutputFormat.createPrettyPrint();              
                      format.setEncoding("utf-8");
                      XMLWriter writer = new XMLWriter(new FileOutputStream ("output2.xml"),format);
                      writer.write(document);
                      writer.close();
        }
}

//目前我还只会用XPath来定位,就比DOM4j简单的多,增加还不会

dom4j+XPath的更多相关文章

  1. dom4j 通过 org.dom4j.XPath 设置命名空间来支持 带namespace 的 xpath

    测试文件 test.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http:/ ...

  2. 如何使用DOM4j+xpath 解析

    1.首先去dom4j官网下载一个对应版本的JAR包 XML的配置文件 导入一个config.xml文件 下面是dom4j+xpath解析XML文件

  3. Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)

    [目录] 一.[基础知识——扫盲] 二.[DOM.SAX.JDOM.DOM4j简单使用介绍] 三.[性能测试] 四.[对比] 五.[小插曲XPath] 六.[补充] 关键字:Java解析xml.解析x ...

  4. JAVA与DOM解析器提高(DOM/SAX/JDOM/DOM4j/XPath) 学习笔记二

    要求 必备知识 JAVA基础知识.XML基础知识. 开发环境 MyEclipse10 资料下载 源码下载   sax.dom是两种对xml文档进行解析的方法(没有具体实现,只是接口),所以只有它们是无 ...

  5. JAVA通过XPath解析XML性能比较(原创)

    (转载请标明原文地址) 最近在做一个小项目,使用到XML文件解析技术,通过对该技术的了解和使用,总结了以下内容. 1 XML文件解析的4种方法 通常解析XML文件有四种经典的方法.基本的解析方式有两种 ...

  6. XML学习笔记(2)--dom4j操作XML

    1. 介绍(四种方式的比较这部分转载自:http://www.blogjava.net/xcp/archive/2010/02/12/312617.html) 1)DOM(JAXP Crimson解析 ...

  7. Dom4j解析Xml文件,Dom4j创建Xml文件

    Dom4j解析Xml文件,Dom4j创建Xml文件 >>>>>>>>>>>>>>>>>>&g ...

  8. java创建XML及开源DOM4J的使用

    java import java.io.File; import java.io.StringWriter; import javax.xml.parsers.DocumentBuilder; imp ...

  9. XPath详解

     xPath技术   1 引入 问题:当使用dom4j查询比较深的层次结构的节点(标签,属性,文本),比较麻烦!!! 2 xPath作用 主要是用于快速获取所需的节点对象. 3 在dom4j中如何使用 ...

随机推荐

  1. windows下如何解决chrome浏览器左下角总提示'Downloading proxy script'的问题

    答:关掉LAN settings中的Automatically detect settings选项和Use automatic configuration script选项,如下图

  2. [AtCoder ARC101D/ABC107D] Median of Medians

    题目链接 题意:给n个数,求出所有子区间的中位数,组成另外一个序列,求出它的中位数 这里的中位数的定义是:将当前区间排序后,设区间长度为m,则中位数为第m/2+1个数 做法:二分+前缀和+树状数组维护 ...

  3. 联想笔记本thinkpad按F2不能直接重命名

    联想笔记本thinkpad按F2不能直接重命名,而是Fn+F2. 解决: 按一下Fn+Esc(一般在左上角)

  4. Ubuntu 上 执行命令 java -version 显示 没有那个文件或目录

    解决方法 执行 which java 发现默认java目录:/usr/bin/java . 查看 JAVA_HOME 路径:$JAVA_HOME,得到 /usr/local/java/jdk1.7.0 ...

  5. Ubuntu16.04 无法连接WiFi

    在安装完 ns-3.25 之后,着手开始准备 Eclipse 的安装,打开了 Firefox游览器 准备上网的时候,发现网络没有正常连接. 刚刚开始怀疑的是,并没有连接上网络. 于是打开了终端,pin ...

  6. Gym - 100345H Settling the Universe Up(bitset)

    https://vjudge.net/problem/Gym-100345H 题意: 给出一个图,求图中u能到达v的对数,并且u<v.并且会有更新和查询操作. 思路: bitset直接暴力,对于 ...

  7. MongoDB(课时29 MapReduce)

    3.7.4 MapReduce MapReduce 是整个大数据的精髓所在(实际中别用,因为在MongoDB中属于最底层操作). MapReduce是一种计算模型,简单的说就是将大批量的工作分解执行, ...

  8. Beta冲刺二——《WAP团队》

    β冲刺第二天  1. 今日完成任务情况以及遇到的问题. ①马麒.杜有海:管理员审核表的进一步完善 ②郝明宇:登录.注册界面的完善 ③马宏伟.周欣:继续完善前端数据借用与后台的连接 ④乌勒扎:登录与注册 ...

  9. Java内存管理知识你需要吗?

    0.Java 对内存的划分: Java虚拟机规范将物理内存(主内存和CPU中的缓存.寄存器)划分为程序计数器.Java 虚拟机栈.本地方法栈.Java 堆.方法区五个区域,但并没有规定这些区域的具体实 ...

  10. java中的值传递和引用传递用法详解

    值传递:方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参 数的值. 引用传递:也称为传地址.方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对 ...