JAVA基于dom4j实现对XML操作「建议收藏」

JAVA基于dom4j实现对XML操作「建议收藏」该篇博客写java基于dom4j来操作xml的一些基本实现,需要用到以下jar包该篇博客目录1、XML特点、语法规则2、XML与HTML区别3、基于dom4j下java实现对XML基本操作一、XML特点、语法规则1、XML特点XML是一种标记语言,很类似HTMLXML的设计宗旨是传输数据,而非显示数据(HTML)XML标签没…

大家好,又见面了,我是你们的朋友全栈君。

该篇博客写java基于dom4j来操作xml的一些基本实现,需要用到以下jar包

这里写图片描述

该篇博客目录

1、XML特点、语法规则
2、XML与HTML区别
3、基于dom4j下java实现对XML基本操作

一、XML特点、语法规则

1、XML特点

  • XML是一种标记语言,很类似HTML
  • XML的设计宗旨是传输数据,而非显示数据(HTML)
  • XML标签没有被预定义,需要自行定义标签(HTML是已经预定义的)
  • XML被设计为具有自我描述性
  • XML是w3c的推荐标准

2、XML语法规则

  • XML不能省略关闭标签
  • XML标签对大小写敏感
  • XML必须正确嵌套
  • XML文档必须有根元素
  • XML的属性值要加”“
  • XML中空格会被保留

二、XML与HTML区别

XML与HTML为不同的目的而设计的

  • XML被设计为传输的存储数据,其焦点是数据的内容
  • HTML被设计为显示数据,其焦点是数据的外观
  • XML旨在传输数据,HTML旨在显示信息

三、基于dom4j下java实现对XML基本操作

可找到官网api https://dom4j.github.io/#top

import java.util.Iterator;
import java.util.List;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;


public class dom4jtext {

    public static void main(String[] args) {
        System.out.println("Creat XML");
        Document document=CreatXML();
        System.out.println(document.asXML());

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

        System.out.println("Parsing XML");
        Document document2=ParsingXML();
        System.out.println(document2.asXML());

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

        System.out.println("iterators XML");
        IteratorsXML();

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

        System.out.println("XPath XML");
        XPathXML();

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

        System.out.println("快速循环 XML");
        try {
            SAXReader reader=new SAXReader();
            Document document3=reader.read("XMLtest.xml");
            TreeWalk(document3);
        } catch (DocumentException e) {
            e.printStackTrace();
        }
        System.out.println("-----------");
        System.out.println("-----------");

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

    }

    //Creat XML
    //创建XML
    public static Document CreatXML() {
        Document document=DocumentHelper.createDocument();//创建xml文档
        Element root=document.addElement("root");//创建根元素

        //添加根元素下的子元素及其属性,内容
        Element node1=root.addElement("node").addAttribute("name", "jay").addText("jay zhou");
        Element node2=root.addElement("node").addAttribute("name", "XU").addText("XU LIN JIE");
        return document;
    }

    //Parsing XML
    //解析XML
    //读取XML
    //SAXReader可以通过多种方式读取xml数据,并返回Document格式的对象。
    //通过查看源码,可以看出read()方法接收File,InputStream和URL等格式的参数来读取相应的xml数据。
    public static Document ParsingXML() {
        Document document = null;
        try {
            //创建解析器
            SAXReader reader=new SAXReader();//创建读取文件内容对象
            document=reader.read("XMLtest.xml");//指定文件并读取

        } catch (DocumentException e) {
            e.printStackTrace();
        }
        return document;
    }

    //iterators XML
    //迭代XML
    public static void IteratorsXML() {
        Document document = null;   
        try {
            SAXReader reader=new SAXReader();
            document=reader.read("XMLtest.xml");
        } catch (DocumentException e) {
            e.printStackTrace();
        }
        Element root=document.getRootElement();
        //遍历孩子元素
        for(Iterator<Element> it=root.elementIterator();it.hasNext();)
        {
            Element element=it.next();
            System.out.println(element.asXML());
        }

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

        //遍历标签为node的元素
        for(Iterator<Element> it=root.elementIterator("node");it.hasNext();)
        {
            Element element=it.next();
            System.out.println(element.asXML());
        }

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

        //遍历根的属性
        for(Iterator<Attribute> it1=root.attributeIterator();it1.hasNext();)
        {
            Attribute attribute=it1.next();
            System.out.println(attribute.asXML());
        }

    }

    /*
     *使用dom4j支持xpath的操作的几种主要形式
            第一种形式
                /AAA/DDD/BBB: 表示一层一层的,AAA下面 DDD下面的BBB
            第二种形式
                //BBB: 表示和这个名称相同,表示只要名称是BBB,都得到
                        第三种形式
                    /*: 所有元素
                        第四种形式
                BBB[1]: 表示第一个BBB元素
                    BBB[last()]:表示最后一个BBB元素
                        第五种形式
                //BBB[@id]: 表示只要BBB元素上面有id属性,都得到
                        第六种形式
                        //BBB[@id='b1'] 表示元素名称是BBB,在BBB上面有id属性,并且id的属性值是b1 
     */
        /*
         * 在dom4j里面提供了两个方法,用来支持xpath
               selectNodes("xpath表达式"),获取多个节点
               selectSingleNode("xpath表达式"),获取一个节点
         */

    //XPath XML
    //快速找到某个元素(dom4j在解析xml时只能一层一层,所以可结合XPath来提高效率)
    //需要导入jaxen-1.1.6.jar是一个开源的XPath库。Jaxen是一个Java编写的开源的XPath库
    public static void XPathXML() {
        Document document=null;
        try {
            SAXReader reader=new SAXReader();
            document=reader.read("XMLtest.xml");
        } catch (DocumentException e) {
            e.printStackTrace();
        }
        List<Node> list=document.selectNodes("//node");
        for(int i=0;i<list.size();i++)
        {
            System.out.println(list.get(i));
        }
    }

    //Looping XML
    //快速循环XML文档树,比iterators性能高
    public static void TreeWalk(Document document)
    {
        TreeWalk_E(document.getRootElement());
    }
    public static void TreeWalk_E(Element element)
    {
        for(int i=0,size=element.nodeCount();i<size;i++)
        {
            Node node=element.node(i);
            if(node instanceof Element)
            {
                System.out.println(node);
                TreeWalk_E((Element)node);
            }
        }
    }

    //字符串转换为XML
    public static void String_XML() {
        String xmlString="<root><people>man</people></root>";
        try {
            Document document=DocumentHelper.parseText(xmlString);
            System.out.println(document.asXML());
        } catch (DocumentException e) {
            e.printStackTrace();
        }

    }

}

输出结果

Creat XML
<?xml version="1.0" encoding="UTF-8"?>
<root><node name="jay">jay zhou</node><node name="XU">XU LIN JIE</node></root>
-----------
-----------
Parsing XML
<?xml version="1.0" encoding="UTF-8"?>
<root><node name="jay">jay zhou</node><node name="XU">XU LIN JIE</node></root>
-----------
-----------
iterators XML
<node name="jay">jay zhou</node>
<node name="XU">XU LIN JIE</node>
-----------
-----------
<node name="jay">jay zhou</node>
<node name="XU">XU LIN JIE</node>
-----------
-----------
-----------
-----------
XPath XML
org.dom4j.tree.DefaultElement@1ee807c6 [Element: <node attributes: [org.dom4j.tree.DefaultAttribute@2bbaf4f0 [Attribute: name name value "jay"]]/>]
org.dom4j.tree.DefaultElement@5cdd8682 [Element: <node attributes: [org.dom4j.tree.DefaultAttribute@11c20519 [Attribute: name name value "XU"]]/>]
-----------
-----------
快速循环 XML
org.dom4j.tree.DefaultElement@70beb599 [Element: <node attributes: [org.dom4j.tree.DefaultAttribute@4e41089d [Attribute: name name value "jay"]]/>]
org.dom4j.tree.DefaultElement@32a068d1 [Element: <node attributes: [org.dom4j.tree.DefaultAttribute@33cb5951 [Attribute: name name value "XU"]]/>]
-----------
-----------
String_XML
<?xml version="1.0" encoding="UTF-8"?>
<root><people>man</people></root>

工程结构

这里写图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/159196.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • iOS5.1.1完美越狱教程

    iOS5.1.1完美越狱教程pod2g和绿毒都没有食言,iOS 5.1.1完美越狱工具在北京时间5月25日晚20点30分出现在了绿毒的官方上。与上次不同的是,本次越狱一口气发了三个版本——OS X、Windows、以及linux,狱友们不用再熬夜了!本次越狱所支持的设备:- iPad3 (WiFi/CDMA/Global)- iPad2 (WiFi/CDMA/GSM)- iPad1- iPhone

  • js判断属性是否存在(javascript的特点)

    参考一:vararray=[{‘yaxis’:22,’lines’:true},{‘lines’:true}]varisTrue=array.some(val=>{returnval.yaxis})if(isTrue===true){console.log(‘数组对象里面存在属性yaxis’)}1.使用in关键字。该方法可…

  • Linux Sendfile 的原理与优点[通俗易懂]

    Linux Sendfile 的原理与优点[通俗易懂]sendfile函数在两个文件描写叙述符之间直接传递数据(全然在内核中操作,传送),从而避免了内核缓冲区数据和用户缓冲区数据之间的拷贝,操作效率非常高,被称之为零拷贝。sendfile函数的定义例如以下:#include&lt;sys/sendfile.h&gt;ssize_tsendfile(intout_fd,intin_fd,off_t*offset,size_tc…

  • latex的参考文献写法标准_endnote怎么修改参考文献编号格式

    latex的参考文献写法标准_endnote怎么修改参考文献编号格式LaTeX参考文献的排版与引用​ 在论文写作的过程中,为了体现论文的科学性、严谨性和规范性,我们常常需要引用大量的参考文献来引证自己的观点。参考文献(Reference)往往都是放在论文的最后,记录了所引用论文的标题、作者、期刊或会议、出版时间等信息,文中还需要明确有顺序的进行引用标注。​ 本篇将介绍LaTeX常用的参考文献排版与引用方式,所用到的宏包都要写在\documentclass命令之后和\begin{docuemnt}之前,在本文中,我们会用的宏包文件有:\usepackag

  • 内核态和用户态区别的重要性_cpu用户态和内核态区别

    内核态和用户态区别的重要性_cpu用户态和内核态区别内核态和用户态区别内核态和用户态区别当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(或简称为内核态)。此时处理器处于特权级最高的(0级)内核代码中执行。当进程处于内核态时,执行的内核代码会使用当前进程的内核栈。每个进程都有自己的内核栈。当进程在执行用户自己的代码时,则称其处于用户运行态(用户态)。即此时处理器在特权级最低的(3级)用户代码中运行。当正在

  • linux移动文件到另一个文件夹「建议收藏」

    linux移动文件到另一个文件夹「建议收藏」复制指定目录下的全部文件到另一个目录中1.文件及目录的复制是经常要用到的。linux下进行复制的命令为cp。假设复制源目录为dir1,目标目录为dir2。怎样才能将dir1下所有文件复制到dir2下了如果dir2目录不存在,则可以直接使用cp-rdir1dir2即可。如果dir2目录已存在,则需要使用cp-rdir1/.dir2例://没有publicData…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号