专栏名称: 一妍为定
目录
相关文章推荐
雨果网  ·  开年不到1个月,超1000亚马逊卖家选择退场 ·  14 小时前  
雨果网  ·  重要!TEMU广告已正式上线 ·  2 天前  
楚天交通广播  ·  氛围感!武汉进入春晚时刻! 80多道文旅大餐→ ·  2 天前  
51好读  ›  专栏  ›  一妍为定

10. 集成`dom4j`

一妍为定  · 简书  ·  · 2021-08-27 11:25

正文

1. 核心依赖
  1. 依赖

    <dependency>
        <groupId>org.dom4j</groupId>
        <artifactId>dom4j</artifactId>
        <version>2.1.1</version>
    </dependency>    
    
2. 使用
  1. 常用 API

    // 解析器: org.dom4j.io.SAXReader;
    SAXReader reader = new SAXReader();
    
    // spring 读取 resources 下的文件
    // org.springframework.core.io.ClassPathResource;
    InputStream inputStream = new ClassPathResource("test/test.xml").getInputStream();
    
    // 获取 document 对象: org.dom4j.Document;
    Document document = reader.read(inputStream);
    
    // 获取根标签:org.dom4j.Element;
    Element root = document.getRootElement();
    
    // 获取标签名字
    element.getName()
    
    // 获取 element 对象的迭代器
    Iterator<Element> elementIterator = element.elementIterator();
    
    // 获取第一个指定名称的子标签
    element.element("name")
    
    // 获取指定名称的所有子标签
    element.elements("name")
    
    // 获取所有子标签
    element.elements()
    
    // 获取标签名为 name 的子标签的内容,去掉空格、换行符
    element.elementTextTrim("name")
    
    // 获取标签名为 name 的子标签的内容
    element.elementText("name")
    
    // 获取内容
    element.getText()
    
    // 获取内容,去掉空格、换行符
    element.getTextTrim()
    
    // 获取名为 name 的属性名的值
    element.attributeValue("name")
    
    // 获取所有的 属性对象
    element.attributes()
    
    // 获取属性对象的属性名
    attribute.getName()
    
    // 获取属性对象的值
    attribute.getValue()
    
  2. 栗子

    1. xml (resources/sql/test.xml)

      <?xml version="1.0" encoding="utf-8" ?>
      <dataSources>
          <dataSource>
              <description>dom4j-测试查询</description>
              <sql id="001" name="sql" haha="2">
                  select * from
                  dual a
                  left join dual b
                  on a.pkid = b.pkid
              </sql>
          </dataSource>
      </dataSources>        
      
    2. 测试

      public void test() throws DocumentException, IOException {
          // 获取 xml 解析器
          SAXReader reader = new SAXReader();
          
          // 将 resources 下的 sql/test.xml 转换为输入流
          InputStream inputStream = new ClassPathResource("sql/test.xml").getInputStream();
          
          // 将输入流转换为 文件对象
          Document document = reader.read(inputStream);
          
          // 获取根标签对象
          Element root = document.getRootElement();
          
          // 获取根标签对象的 迭代器
          Iterator<Element> elementIterator = root.elementIterator();
          
          while (elementIterator.hasNext()) {
              Element element = elementIterator.next();
              Iterator<Element> iterator = element.elementIterator();
             
              while (iterator.hasNext()) {
                  Element next = iterator.next();
                  // System.out.println(next.getText());
                  
                  // 获取内容,并去掉空格、换行符、回车符等
                  System.out.println(next.getTextTrim());
              }
              
              // 获取 sql 子标签的内容,并去掉空格、换行符、回车符等
              // System.out.println(element.elementTextTrim("sql"));
              
              // 先获取名为 sql 的子标签,然后再获取内容,并去掉空格、换行符、回车符等
              // System.out.println(element.element("sql").getTextTrim());
              
              Element sql = element.element("sql");
              
              // 获取 sql 子标签的所有属性
              List<Attribute> attributes = sql.attributes();
              
              // 获取名为 id 的属性值
              System.out.println(sql.attributeValue("id"));
              
              for (Attribute attribute : attributes) {
                  // 打印 属性名 + 属性值
                  System.out.println(attribute.getName()+ " = " + attribute.getValue());
              }
      }