资讯专栏INFORMATION COLUMN

Dom4j 读写XML简介

megatron / 1552人阅读

摘要:原文链接修改部分过时内容,添加部分示例要使用读写文档需要先下载包官方网站在目前最新包下载地址解开后有两个包仅操作文档的话把加入工程就可以了如果需要使用的话还需要加入包以下是相关操作一对象相关读取文件获得对象解析形式的文本得到对象主动创

原文链接:http://www.blogjava.net/junglesong/archive/2008/02/21/181196.html

修改部分过时内容,添加部分示例.

要使用 dom4j 读写 XML 文档,需要先下载dom4j包,dom4j官方网站在 http://www.dom4j.org/
目前最新dom4j包下载地址:http://nchc.dl.sourceforge.net/sourceforge/dom4j/dom4j-1.6.1.zip

解开后有两个包,仅操作XML文档的话把 dom4j-1.6.1.jar 加入工程就可以了,如果需要使用 XPath 的话还需要加入包 jaxen-1.1.6.jar.

以下是相关操作:

一.Document对象相关

读取XML文件,获得document对象.

SAXReader reader = new SAXReader();
Document  document = reader.read(new File("input.xml"));

解析XML形式的文本,得到document对象.

String text = "";
Document document = DocumentHelper.parseText(text);

主动创建document对象.

Document document = DocumentHelper.createDocument();
Element root = document.addElement("members");// 创建根节点

二.节点相关

获取文档的根节点.

Element rootElm = document.getRootElement();

取得某节点的单个子节点.

Element memberElm=root.element("member");// "member"是节点名

取得节点的文字

String text=memberElm.getText();

也可以用:

String text=root.elementText("name");//这个是取得根节点下的 name 子节点的文字.

取得某节点下名为"member"的所有字节点并进行遍历.

List nodes = rootElm.elements("member");

for (Iterator it = nodes.iterator(); it.hasNext();) {
   Element elm = (Element) it.next();
   // do something
}

对某节点下的所有子节点进行遍历.

for(Iterator it=root.elementIterator();it.hasNext();){
        Element element = (Element) it.next();
        // do something
}

在某节点下添加子节点.

Element ageElm = newMemberElm.addElement("age");

设置节点文字.

ageElm.setText("29");

删除某节点.

parentElm.remove(childElm);// childElm是待删除的节点,parentElm是其父节点

三.属性相关.

取得某节点下的某属性

    Element root=document.getRootElement();    
    Attribute attribute=root.attribute("size");// 属性名name

取得属性的文字

    String text=attribute.getText();

也可以用:

String text2=root.element("name").attributeValue("firstname"); //这个是取得根节点下name    字节点的属性firstname的值.

遍历某节点的所有属性

Element root=document.getRootElement();    
for(Iterator it=root.attributeIterator();it.hasNext();){
        Attribute attribute = (Attribute) it.next();
        String text=attribute.getText();
        System.out.println(text);
    }

示例文档 demo.xml



    
    

java代码

SAXReader saxReader = new SAXReader();
Document document = saxReader.read(baseUrl);
// 获取根节点
Element rootElement = document.getRootElement();
// 获取指定节点的集合
List configlist = rootElement.selectNodes("config");
for (Element element : configlist) {
    Map map = new HashMap();
    String name = element.attribute("name").getStringValue();
    String value = element.attribute("value").getStringValue();
    map.put(name, value);
    //doSomething   
}    

设置某节点的属性和文字.

newMemberElm.addAttribute("name", "sitinspring");

设置属性的文字

Attribute attribute=root.attribute("name");
attribute.setText("sitinspring");

删除某属性

Attribute attribute=root.attribute("size");// 属性名name
root.remove(attribute);

四.将文档写入XML文件.

文档中全为英文,不设置编码,直接写入的形式.

XMLWriter writer = new XMLWriter(new FileWriter("output.xml"));
writer.write(document);
writer.close();

文档中含有中文,设置编码格式写入的形式.

OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("GBK");    // 指定XML编码        
XMLWriter writer = new XMLWriter(new FileWriter("output.xml"),format);

writer.write(document);
writer.close();

五.字符串与XML的转换

将字符串转化为XML

String text = "sitinspring";
Document document = DocumentHelper.parseText(text);

将文档或节点的XML转化为字符串.

SAXReader reader = new SAXReader();
Document  document = reader.read(new File("input.xml"));            
Element root=document.getRootElement();                
String docXmlText=document.asXML();
String rootXmlText=root.asXML();
Element memberElm=root.element("member");
String memberXmlText=memberElm.asXML();

六.使用 XPath 快速找到节点.

读取的 XML 文档示例



  MemberManagement
  
  
    PRJ1
    PRJ2
    PRJ3
    PRJ4
  
  
    
      org.eclipse.jdt.core.javabuilder
      
      
    
  
  
    org.eclipse.jdt.core.javanature
  

使用XPath快速找到节点project

public static void main(String[] args){

SAXReader reader = new SAXReader();

try{
  Document  doc = reader.read(new File("sample.xml"));

  List projects=doc.selectNodes("/projectDescription/projects/project"); // 以"/" 开头

  Iterator it=projects.iterator();

  while(it.hasNext()){
    Element elm=(Element)it.next();       
    System.out.println(elm.getText());
  }
}
catch(Exception ex){
   ex.printStackTrace();
}
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/64113.html

相关文章

  • Dom4j 读写XML简介

    摘要:原文链接修改部分过时内容,添加部分示例要使用读写文档需要先下载包官方网站在目前最新包下载地址解开后有两个包仅操作文档的话把加入工程就可以了如果需要使用的话还需要加入包以下是相关操作一对象相关读取文件获得对象解析形式的文本得到对象主动创 原文链接:http://www.blogjava.net/junglesong/archive/2008/02/21/181196.html 修改部分...

    cartoon 评论0 收藏0
  • 浅析SAX,DOM,JAXP,JDOM与DOM4J之间的关系

    摘要:通过解析器获取文档对象后,开发人员可以很方便的对其进行操作,如获取更元素,获取一个子元素,增加子元素,移除子元素。它并没有为解析提供任何新功能,但是它为在获取与解析器提供了更加直接的途径。自身不包含解析器,默认使用随包一起发行的。 showImg(/img/bVDhQE?w=888&h=220); 文章最初发表于我的个人博客非典型性程序猿 众所周知,SAX与DOM是JAVA中两大核心X...

    妤锋シ 评论0 收藏0
  • 浅析SAX,DOM,JAXP,JDOM与DOM4J之间的关系

    摘要:通过解析器获取文档对象后,开发人员可以很方便的对其进行操作,如获取更元素,获取一个子元素,增加子元素,移除子元素。它并没有为解析提供任何新功能,但是它为在获取与解析器提供了更加直接的途径。自身不包含解析器,默认使用随包一起发行的。 showImg(https://segmentfault.com/img/bVDhQE?w=888&h=220); 文章最初发表于我的个人博客非典型性程序猿...

    JasinYip 评论0 收藏0
  • XML就是这么简单

    什么是XML? XML:extensiable markup language 被称作可扩展标记语言 XML简单的历史介绍: gml->sgml->html->xml gml(通用标记语言)–在不同的机器进行通信的数据规范 sgml(标准通用标记语言) html(超文本标记语言) 为什么我们需要使用XML呢? ①我们没有XML这种语言之前,我们使用的是String作为两个程序之间的通讯!现在问...

    pf_miles 评论0 收藏0
  • XML就是这么简单

    什么是XML? XML:extensiable markup language 被称作可扩展标记语言 XML简单的历史介绍: gml->sgml->html->xml gml(通用标记语言)–在不同的机器进行通信的数据规范 sgml(标准通用标记语言) html(超文本标记语言) 为什么我们需要使用XML呢? ①我们没有XML这种语言之前,我们使用的是String作为两个程序之间的通讯!现在问...

    yacheng 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<