• 使用Dom4j解析xml


    1. xml

    概念Extensible Markup Language 可扩展标记语言

    可扩展:标签都是自定义的。

    功能

    存储数据
    ​ 1. 配置文件
    ​ 2. 在网络中传输

    xml与html的区别

    1. xml标签都是自定义的,html标签是预定义。
    2. xml的语法严格,html语法松散
    3. xml是存储数据的,html是展示数据

    基本语法:

    1. xml文档的后缀名 .xml
    2. xml第一行必须定义为文档声明
    3. xml文档中有且仅有一个根标签
    4. 属性值必须使用引号(单双都可)引起来
    5. 标签必须正确关闭
    6. xml标签名称区分大小写

    简单实例

    <?xml version='1.0' ?>
    <users>
        <user id='1'>
            <name>zhangsan</name>
            <age>23</age>
            <gender>male</gender>
            <br/>
        </user>
    
        <user id='2'>
            <name>lisi</name>
            <age>24</age>
            <gender>female</gender>
        </user>
    </users>
    

    组成部分:

    1. 文档声明
      1. 格式:
      2. 属性列表:
    * version:版本号,必须的属性
    * encoding:编码方式。告知解析引擎当前文档使用的字符集,默认值:ISO-8859-1
    * standalone:是否独立
      * 取值:
        * yes:不依赖其他文件
        * no:依赖其他文件
    
    1. 标签:标签名称自定义的
    • 规则:
      • 名称可以包含字母、数字以及其他的字符
      • 名称不能以数字或者标点符号开始
      • 名称不能以字母 xml(或者 XML、Xml 等等)开始
      • 名称不能包含空格
    1. 属性:
      id属性值唯一
    2. 文本:
    • CDATA区:在该区域中的数据会被原样展示
      • 格式:

    2. xml解析与写入

    xml常见的解析器:

    	1. JAXP:sun公司提供的解析器,支持dom和sax两种思想
    	2. DOM4J:一款非常优秀的解析器
    	3. Jsoup:jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
    	4. PULL:Android操作系统内置的解析器,sax方式的。
    

    使用dom4j解析xml

    xml文件如下

    <?xml version='1.0' ?>
    <users error="none" code="success">
        <user id='1'>
            <name>zhangsan</name>
            <age>23</age>
            <gender>male</gender>
            <br/>
        </user>
    
        <user id='2'>
            <name>lisi</name>
            <age>24</age>
            <gender>female</gender>
        </user>
    </users>
    

    解析xml

    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    
    import java.io.File;
    import java.util.List;
    
    public class XmlDemo {
        public static void main(String[] args) throws DocumentException {
            //获取文档对象
            SAXReader reader = new SAXReader();
            Document doc = reader.read(new File("user.xml"));
            //获取根元素
            Element root = doc.getRootElement();
            System.out.println("获取到的根元素" + root);
            //获取所有的子元素Love
            List<Element> users = root.elements("user");
            //输入name元素的内容
            for (Element element : users) {
                System.out.println("获取id属性:" + element.attribute("id").getValue());
                System.out.println("获取name:" + element.elementTextTrim("name"));
                System.out.println("获取age:" + element.elementTextTrim("age"));
                System.out.println("获取gender:" + element.elementTextTrim("gender"));
                System.out.println("---------------");
            }
        }
    }
    
    

    使用XPath快速查找

    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.Node;
    import org.dom4j.io.SAXReader;
    
    import java.io.File;
    import java.util.List;
    
    public class XmlDemo {
        public static void main(String[] args) throws DocumentException {
            //获取文档对象
            SAXReader reader = new SAXReader();
            Document doc = reader.read(new File("user.xml"));
            List<Node> list = doc.selectNodes("//user");
            for (Node node : list) {
                System.out.println(node.valueOf("name"));
            }
    
            System.out.println("------------");
    
            Node node = doc.selectSingleNode("//user");
            String id = node.valueOf("@id");
            System.out.println(id);
    
            System.out.println("------------");
    
            Node node2 = doc.selectSingleNode("//user[@id='2']");
            String name = node.valueOf("name");
            System.out.println(name);
        }
    }
    
    
    

    创建一个新的XML文档并写入本地

    import org.dom4j.Document;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.XMLWriter;
    
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class XmlDemo {
        public static void main(String[] args) throws IOException {
            Document document = DocumentHelper.createDocument();
            Element root = document.addElement("root");
    
            Element author1 = root.addElement("author")
                    .addAttribute("name", "James")
                    .addAttribute("location", "UK")
                    .addText("James Strachan");
    
            Element author2 = root.addElement("author")
                    .addAttribute("name", "Bob")
                    .addAttribute("location", "US")
                    .addText("Bob McWhirter");
            //设置写入xml为格式化的xml
            OutputFormat format = OutputFormat.createPrettyPrint();
            //设置写入的xml为压缩的xml
            //OutputFormat format = OutputFormat.createCompactFormat();
            XMLWriter writer = new XMLWriter(new FileOutputStream("new.xml"), format);
            writer.write(document);
            writer.close();
        }
    }
    
    

    遍历迭代xml

    import org.dom4j.Attribute;
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    
    import java.io.File;
    import java.io.IOException;
    import java.util.Iterator;
    
    public class XmlDemo {
        public static void main(String[] args) throws DocumentException {
            //获取文档对象
            SAXReader reader = new SAXReader();
            Document document = reader.read(new File("user.xml"));
            Element root = document.getRootElement();
            // iterate through child elements of root
            for (Iterator<Element> it = root.elementIterator(); it.hasNext(); ) {
                Element element = it.next();
                // do something
                System.out.println(element.elementTextTrim("name"));
            }
    
            System.out.println("----------------");
    
            // iterate through child elements of root with element name "foo"
            for (Iterator<Element> it = root.elementIterator("user"); it.hasNext(); ) {
                Element user = it.next();
                System.out.println(user.elementTextTrim("age"));
            }
    
            System.out.println("----------------");
    
            // iterate through attributes of root
            for (Iterator<Attribute> it = root.attributeIterator(); it.hasNext(); ) {
                Attribute attribute = it.next();
                // do something
                System.out.println(attribute.getValue());
            }
        }
    }
    
    

  • 相关阅读:
    react中关于render渲染次数的性能优化
    ES6中六种常用的传出调用方式
    在Vue-cli中得xxx.vue文件中快速生成组件模板
    如何在Vue-cli中关闭ESLint以及关闭部分ESLint验证
    使用ES6删除对象中某些属性
    React中使用遍历
    git commit报错解决,绕过代码检查
    React学习——子组件给父组件传值
    React学习——通过模态框中的表单,学习父子组件之间传值
    学习axios
  • 原文地址:https://www.cnblogs.com/ifme/p/12402570.html
Copyright © 2020-2023  润新知