• dom4j(XML解析)私人学习笔记


    俗话说“好记性不如烂笔头”,编程的海洋如此的浩大,养成做笔记的习惯是成功的一步!

    此笔记主要是dom4j-1.6版本的笔记,并且笔记都是博主自己一字一字编写和记录,有错误的地方欢迎大家指正。




    一、基础知识:

    1、xmlTool的功能是可以在java中操作xml文件。
    使用SaxReader读取和操作xml文件,必须导入dom4j-1.6.1.jar
    使用XPath的功能,必须导入 jaxen-1.1-beta-6.jar

    2、xml文件顶部头说明:
    <?xml version="1.0" encoding="UTF-8"?>


    3、dom4j读取xml的方式大概分为两种:
    (1)读取整个XML文件到内存中,在内存中维持DOM树,方便且可以使用xpath,但比较耗内存空间:
    代码:
    Document sa=new SAXReader().read("d:/data2.xml");
    //获取根元素
    Element root = sa.getRootElement();

    (2)使用SAX来读取,特点是读一段解析一段,并不会把整个xml文件读取到内存中,节省内存空间。
    代码:
    // 创建一个解析器的实例
    SAXParserFactory factory = SAXParserFactory.newInstance();
    SAXParser saxParser = factory.newSAXParser();


    // 执行解析操作(PersonListHandler需要实现org.xml.sax.helpers.DefaultHandler接口)
    PersonListHandler personListHandler = new PersonListHandler();
    saxParser.parse("d:/data2.xml", personListHandler);


    二、注意事项:

    1、如果想使用特殊字符,需要进行转义:
    &lt; < 小于 
    &gt; > 大于 
    &amp; &   和号 
    &apos; ' 省略号 
    &quot; " 引号 

    2、另一种防转义方式:<!CDATA[[数据]]>。xml解析器不会对<!CDATA[[数据]]>里面的数据进行解析,会直接原文输出 数据。
    例如:<!CDATA[["我的个人数据<私密>"]]>,最终使用dom4j解析后输出为 "我的个人数据<私密>"

    3、如果想用dom4j创建xml的文本内容加上<!CDATA[[数据]]>来转义,可以使用DocumentHelper.createCDATA()方法。

    4、如果xml格式不正确,那么在使用dom4j解析时,会报错。

    5、xml的元素也可以使用简短字符结束。例如 <person></person> 可以简写为 <person/>

    6、使用dom4j创建xml文件时,会自动将相应的特殊字符进行转义,例如 DocumentHelper.createText("<小米>");最终输出 &lt;小米&gt;

    7、使用dom4j创建xml时,默认创建的是 紧凑模式,可以使用OutputFormat来指定创建的模式:
    OutputFormat.createPrettyPrint()  :美观模式(易读)
    OutputFormat.createCompactFormat() :紧凑模式(不易读但省空间)


    8、被解析的xml文件必须含有有root根元素,如果xml文件一个元素都没有,那么解析时将会报错。

    5、使用dom4j解析xml格式的字符串时,可以使用:

    DocumentHelper.parseText(xmlStr);

    或者使用:

    Document result = null;
    SAXReader reader = new SAXReader();
    String encoding = getEncoding(text);
    InputSource source = new InputSource(new StringReader(text));
    source.setEncoding(encoding);
    result = reader.read(source);


    6、xml格式是非常严谨的,开头必须使用<?xml version='1.0' encoding='UTF-8'?> 来声明当前文件是xml文件,并且 <与? 之间不能有空格,否则dom4j不认为是个协议头,导致解析失败。
      并且xml是必须由<标签></标签>组合,少了起始或结束标签都将解析失败,并且是严格区分大小写的,既<Root></root>是不匹配的。这两点特性与html语言不同,html语言是不严谨且比较
      松散的语言,不区分大小写,且少了起始或结束标签照样会继续往下解析。



    java代码使用示例:

    package cn.itcast.d_xml_write;
    
    import java.io.FileOutputStream;
    import java.io.OutputStream;
    
    import org.dom4j.Document;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
    import org.dom4j.io.XMLWriter;
    import org.junit.Test;
    
    public class TestWriteXml1 {
    
    
    
    		// 看一下DOM树中的节点对象
    	@Test
    	public void test2() throws Exception {
    		// 解析XML文件,得到Document对象
    		Document document = new SAXReader().read("d:/data.xml");
    
    		// 根节点
    		Element rootElement = document.getRootElement();
    		System.out.println(rootElement);
    
    		// 根节点下的子节点
    		List<Element> children = rootElement.elements();
    		for(Element child : children){
    			System.out.println(child);
    		}
    	}
    	
    
    	// 写XML文件的HelloWorld(使用dom4j的工具类 --> DOM模型 --> xml文件)
    	@Test
    	public void test1() throws Exception {
    		// --------------------------------------------------------------------
    		// 【创建DOM树】
    
    		// 创建一个新的Document对象
    		Document document = DocumentHelper.createDocument();
    		// 创建一个新的标签对象
    		Element rootElement = DocumentHelper.createElement("person-list");
    		// 把这个标签对象添加Document中,做为此document的根元素
    		document.add(rootElement);
    
    		// --------------------------------------------------------------------
    		// 【把DOM树写成xml文件】
    
    		// 写到xml文件中
    		OutputStream out = new FileOutputStream("d:/data2.xml");
    		XMLWriter xmlWriter = new XMLWriter(out);
    		xmlWriter.write(document);
    		xmlWriter.close();
    	}
    }
    


  • 相关阅读:
    nethogs 实时查看进程使用流量情况。
    Bash 使用技巧
    Linux源代码编译安装tree命令
    【字体区别】Serif和Sans Serif
    MySQL数据库恢复的经历。
    Linux常用命令
    关于一机多区的可行性分析。
    记一次node节点异常排查
    kube-prometheus部署
    认证、授权与准入控制
  • 原文地址:https://www.cnblogs.com/catgwj/p/7503302.html
Copyright © 2020-2023  润新知