• dom4j 使用总结


    dom4j是一个Java的XML API,类似于jdom,用来读写XML文件

    dom4j的使用方法简单总结来说如下:

    ①可以创建一个新的xml文件

    ②利用SAXReader和File对象创建一个已存在的xml文件的一个Document对象

    ③利用Document对象的getRootElement()方法获取根节点,返回值类型为Element

    ④利用根节点,可以用迭代器遍历子节点,也可以直接利用XPATH语法查找节点,对节点元素、属性读取或更改

    ⑤将更改写入xml文件保存

    下面来看简单的实例:

    ①创建一个新的xml文件,这是dom4j官方文档中的一个例子

     1 import org.dom4j.Document;
     2 import org.dom4j.DocumentHelper;
     3 import org.dom4j.Element;
     4 
     5 public class Foo {
     6 
     7     public Document createDocument() {
     8         Document document = DocumentHelper.createDocument();
     9         Element root = document.addElement( "root" );
    10 
    11         Element author1 = root.addElement( "author" )
    12             .addAttribute( "name", "James" )
    13             .addAttribute( "location", "UK" )
    14             .addText( "James Strachan" );
    15         
    16         Element author2 = root.addElement( "author" )
    17             .addAttribute( "name", "Bob" )
    18             .addAttribute( "location", "US" )
    19             .addText( "Bob McWhirter" );
    20 
    21         return document;
    22     }
    23 }

    ②利用SAXReader和File对象或xml的URL创建一个已存在的xml文件的一个Document对象

    这里是dom4j官方文档中利用xml文件URL创建Document对象的一个例子:

     1 import java.net.URL;
     2 
     3 import org.dom4j.Document;
     4 import org.dom4j.DocumentException;
     5 import org.dom4j.io.SAXReader;
     6 
     7 public class Foo {
     8 
     9     public Document parse(URL url) throws DocumentException {
    10         SAXReader reader = new SAXReader();
    11         Document document = reader.read(url);
    12         return document;
    13     }
    14 }

    下面是我写的用SAXReader和File创建Document对象的例子:

     1 import java.io.File;
     2 import java.io.IOException;
     3 
     4 import org.dom4j.Document;
     5 import org.dom4j.DocumentException;
     6 import org.dom4j.io.SAXReader;
     7 
     8 public class Foo {
     9 
    10     public Document parse() throws DocumentException ,IOException{
    11      SAXReader reader = new SAXReader();
    12      File file = new File("Student.xml");
    13      Document document = reader.read(file);
    14      return document;
    15     }
    16 }    

    ③利用Document对象的getRootElement()方法获取根节点,返回值类型为Element

    1 Element rootElement = document.getRootElement();

    ④用迭代器遍历子节点,也可以直接利用XPATH语法查找节点,对节点元素、属性读取或更改

    利用迭代器遍历: 

     1 public void bar(Document document) throws DocumentException {
     2 
     3         Element root = document.getRootElement();
     4 
     5         //迭代root的子节点
     6         for ( Iterator i = root.elementIterator(); i.hasNext(); ) {
     7             Element element = (Element) i.next();
     8             // do something
     9         }
    10 
    11         // 迭代root的名为"foo"的子节点
    12         for ( Iterator i = root.elementIterator( "foo" ); i.hasNext(); ) {
    13             Element foo = (Element) i.next();
    14             // do something
    15         }
    16 
    17         // 迭代root的属性
    18         for ( Iterator i = root.attributeIterator(); i.hasNext(); ) {
    19             Attribute attribute = (Attribute) i.next();
    20             // do something
    21         }
    22      }

    利用XPATH语法查找节点:

     1 public void bar(Document document) {
     2         List list = document.selectNodes( "//foo/bar" );
     3 
     4         Node node = document.selectSingleNode( "//foo/bar/author" );
     5 
     6         String name = node.valueOf( "@name" );
     7 }
     8 
     9 public void findLinks(Document document) throws DocumentException {
    10 
    11         List list = document.selectNodes( "//a/@href" );
    12 
    13         for (Iterator iter = list.iterator(); iter.hasNext(); ) {
    14             Attribute attribute = (Attribute) iter.next();
    15             String url = attribute.getValue();
    16         }
    17 }
    Element类中的attribute(String name)方法和element(String name)方法分别可以获取节点的属性对象和某一子节点对象
    elements(String name)方法可以返回名为name的子节点的列表List。
    get(int index)方法可以获取本节点下以index索引的节点
     
    getName()方法可以获取本节点的名字(name)
    attributeValue(String name)方法以及Attribute类中的getValue()方法可以获取本节点name属性的值
    getText()方法可以返回本节点的文本内容
    elementText(String name)方法可以获取name子节点的文本内容
     
    remove(Attribute attribute)方法和remove(Element element)方法分别可以移除本节点的某属性和某子节点
     
     
    ⑤将更改写入xml文件保存
     
    官方文档中的例子:
     1 import org.dom4j.Document;
     2 import org.dom4j.io.OutputFormat;
     3 import org.dom4j.io.XMLWriter;
     4 
     5 public class Foo {
     6 
     7     public void write(Document document) throws IOException {
     8 
     9         // lets write to a file
    10         XMLWriter writer = new XMLWriter(
    11             new FileWriter( "output.xml" )
    12         );
    13         writer.write( document );
    14         writer.close();
    15 
    16 
    17         // Pretty print the document to System.out
    18         OutputFormat format = OutputFormat.createPrettyPrint();
    19         writer = new XMLWriter( System.out, format );
    20         writer.write( document );
    21 
    22         // Compact format to System.out
    23         format = OutputFormat.createCompactFormat();
    24         writer = new XMLWriter( System.out, format );
    25         writer.write( document );
    26     }
    27 }
  • 相关阅读:
    golang学习 ---并发获取多个URL
    MySQL的my.cnf文件(解决5.7.18下没有my-default.cnf)
    Python ElasticSearch API
    linux 输出重定向 何时会写文件
    Linux top命令的用法详细详解
    mysql 5.7.13 安装配置方法(linux)-后期部分运维
    linux下各目录的作用
    MySQL 获得当前日期时间 函数
    mysql导入大批量数据出现MySQL server has gone away的解决方法
    python之MySQL学习——防止SQL注入
  • 原文地址:https://www.cnblogs.com/z941030/p/4557200.html
Copyright © 2020-2023  润新知