dom4j 使用总结

public class Test {

    public void testWrite() throws Exception{

createDocument();

addElement("root");

 

            //第一个结点

addElement("user")

addAttribute("name","zhangshan")

addAttribute("blog", www.zhangshan.com)

addText("我是中文的名字");

setText("博客");

 

addElement("网站地址");//增加一个结点

setText("www.zhangshan.com");// 设置结点内容

 

           //第二个结点

addElement("网站").addText("JAVA博客");

setText(www.zhangshan.com);

 

           //以下代码是知道某结点,向此结点插入数据

element("user");// 取得某节点的单个子节点.

addElement("流量");

setText("100");

           //end

 

xml"));

 

write(document);

close();    

 

        }

 

    public static void main(String[] args) {

        Test t = new Test();

        try {

testWrite();

        } catch (Exception e) {

            // TODO Auto-generated catch block

printStackTrace();

        }

    }

 

-------------------------

 

SAXReader reader = new SAXReader();

read(...);

selectNodes("//Config/Child/ChildNode");

for(Object obj:childNodes) {

Node childNode = (Node)obj;

valueOf("@name");

getText();

}

Document对象相关

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

SAXReader reader = new SAXReader();

read(new File("input.xml"));

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

String text = "<members></members>";

parseText(text);

主动创建document对象.

createDocument();

addElement("members");// 创建根节点

节点相关

获取文档的根节点.

getRootElement();

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

element("member");// "member"是节点名

取得节点的文字

getText();也可以用:

elementText("name");这个是取得根节点下的name字节点的文字.

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

elements("member");

iterator(); it.hasNext();) {

next();

// do something

}

 

elementIterator();it.hasNext();){

next();

// do something

}

 

addElement("age");

 

setText("29");

 

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

添加一个CDATA节点.

addElement("content");

addCDATA(diary.getContent());

属性相关.

取得某节点下的某属性

getRootElement();

attribute("size");// 属性名name

取得属性的文字

getText();也可以用:

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

遍历某节点的所有属性

getRootElement();

attributeIterator();it.hasNext();){

next();

getText();

out.println(text);

}

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

addAttribute("name", "sitinspring");

设置属性的文字

attribute("name");

setText("sitinspring");

删除某属性

attribute("size");// 属性名name

remove(attribute);

将文档写入XML文件.

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

xml"));

write(document);

close();

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

createPrettyPrint();

setEncoding("GBK"); // 指定XML编码

xml"),format);

write(document);

close();

字符串与XML的转换

将字符串转化为XML

String text = "<members> <member>sitinspring</member> </members>";

parseText(text);

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

SAXReader reader = new SAXReader();

read(new File("input.xml"));

getRootElement();

asXML();

asXML();

element("member");

asXML();

xml。

 示例 XML 文档(catalog.xml)

0" encoding="UTF-8"?>

<catalog>

<!--An XML Catalog-->

<?target instruction?>

<journal title="XML Zone"

publisher="IBM developerWorks">

<article level="Intermediate" date="December-2001">

<title>Java configuration with XML Schema</title>

<author>

<firstname>Marcello</firstname>

<lastname>Vitaletti</lastname>

</author>

</article>

</journal>

</catalog>

xml,清单 2 是修改后的 XML 文档,catalog-modified.xml。

 修改后的 XML 文档(catalog-modified.xml)

0" encoding="UTF-8"?>

<catalog>

<!--An XML catalog-->

<?target instruction?>

<journal title="XML Zone"

publisher="IBM developerWorks">

<article level="Introductory" date="October-2002">

<title>Create flexible and extensible XML schemas</title>

<author>

<firstname>Ayesha</firstname>

<lastname>Malik</lastname>

</author>

</article>

</journal>

</catalog>

-----------------------------------------

 

 

SAXReader reader =  new  SAXReader();    

read(...);    

selectNodes("//Config/Child/ChildNode" );    

for (Object obj:childNodes) {    

Node childNode = (Node)obj;    

   

valueOf("@name" );    

getText();    

}    

   

   

   

Document对象相关   

   

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

             SAXReader reader = new  SAXReader();   

read(new  File( "input.xml" ));   

   

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

             String text = "<members></members>" ;   

parseText(text);   

主动创建document对象.   

createDocument();   

addElement("members" ); // 创建根节点    

节点相关   

   

获取文档的根节点.   

getRootElement();   

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

element("member" ); // "member"是节点名    

取得节点的文字   

getText();也可以用:   

elementText("name" );这个是取得根节点下的name字节点的文字.   

   

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

elements("member" );   

   

iterator(); it.hasNext();) {   

next();   

   // do something    

}   

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

elementIterator();it.hasNext();){   

next();   

                // do something    

             }   

在某节点下添加子节点.   

addElement("age" );   

设置节点文字.   

setText("29" );   

删除某节点.   

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

添加一个CDATA节点.   

addElement("content" );   

addCDATA(diary.getContent());   

   

属性相关.   

取得某节点下的某属性   

getRootElement();       

attribute("size" ); // 属性名name    

取得属性的文字   

getText();也可以用:   

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

   

遍历某节点的所有属性   

getRootElement();       

attributeIterator();it.hasNext();){   

next();   

getText();   

out.println(text);   

             }   

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

addAttribute("name" ,  "sitinspring" );   

设置属性的文字   

attribute("name" );   

setText("sitinspring" );   

删除某属性   

attribute("size" ); // 属性名name    

remove(attribute);   

将文档写入XML文件.   

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

xml" ));   

write(document);   

close();   

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

createPrettyPrint();   

setEncoding("GBK" );     // 指定XML编码            

xml" ),format);   

               

write(document);   

close();   

字符串与XML的转换   

将字符串转化为XML   

String text = "<members> <member>sitinspring</member> </members>" ;   

parseText(text);   

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

             SAXReader reader = new  SAXReader();   

read(new  File( "input.xml" ));               

getRootElement();                   

asXML();   

asXML();   

element("member" );   

asXML();   

   

   

   

   

xml。   

   

 示例 XML 文档(catalog.xml)    

0"  encoding= "UTF-8" ?>    

<catalog>    

<!--An XML Catalog-->    

<?target instruction?>   

  <journal title="XML Zone"     

                  publisher="IBM developerWorks" >    

<article level="Intermediate"  date= "December-2001" >   

 <title>Java configuration with XML Schema</title>    

 <author>    

     <firstname>Marcello</firstname>    

     <lastname>Vitaletti</lastname>    

 </author>   

  </article>   

  </journal>    

</catalog>   

    

   

   

xml,清单 2  是修改后的 XML 文档,catalog-modified.xml。   

   

 修改后的 XML 文档(catalog-modified.xml)    

0"  encoding= "UTF-8" ?>    

<catalog>    

<!--An XML catalog-->    

<?target instruction?>   

  <journal title="XML Zone"    

                   publisher="IBM developerWorks" >    

<article level="Introductory"  date= "October-2002" >   

 <title>Create flexible and extensible XML schemas</title>    

 <author>    

     <firstname>Ayesha</firstname>    

     <lastname>Malik</lastname>    

 </author>    

  </article>   

  </journal>    

</catalog>   

    

   

   

与 W3C DOM API 相比,使用 dom4j 所包含的解析器的好处是 dom4j 拥有本地的 XPath 支持。DOM 解析器不支持使用 XPath 选择节点。   

   

本文包括以下几个部分:   

   

预先设置    

创建文档    

修改文档    

预先设置   

   

org 获取。通过设置使 dom4j-1.4/dom4j-full.jar 能够在 classpath 中访问,该文件中包括 dom4j 类、 XPath 引擎以及 SAX 和 DOM 接口。如果已经使用了 JAXP 解析器中包含的 SAX 和 DOM 接口,向 classpath 中增加 dom4j-1.4/dom4j.jar 。 dom4j.jar 包括 dom4j 类和 XPath 引擎,但是不含 SAX 与 DOM 接口。     

   

   

   

    

   

   

 回页首    

    

   

   

   

创建文档   

   

xml。   

   

使用 import  语句导入 dom4j API 类:   

   

dom4j.Document;   

dom4j.DocumentHelper;   

dom4j.Element;   

    

   

   

使用 DocumentHelper 类创建一个文档实例。 DocumentHelper 是生成 XML 文档节点的 dom4j API 工厂类。    

   

createDocument();    

   

   

使用 addElement() 方法创建根元素 catalog 。 addElement() 用于向 XML 文档中增加元素。    

   

addElement("catalog" );    

   

   

在 catalog 元素中使用 addComment() 方法添加注释“An XML catalog”。    

   

addComment("An XML catalog" );    

   

   

在 catalog 元素中使用 addProcessingInstruction() 方法增加一个处理指令。    

   

addProcessingInstruction("target" , "text" );    

   

   

在 catalog 元素中使用 addElement() 方法增加 journal 元素。    

   

addElement("journal" );    

   

   

使用 addAttribute() 方法向 journal 元素添加 title 和 publisher 属性。    

   

addAttribute("title" ,  "XML Zone" );   

addAttribute("publisher" ,  "IBM developerWorks" );    

   

   

向 article 元素中添加 journal 元素。    

   

addElement("article" );    

   

   

为 article 元素增加 level 和 date 属性。    

   

addAttribute("level" ,  "Intermediate" );   

addAttribute("date" ,  "December-2001" );    

   

   

向 article 元素中增加 title 元素。    

   

addElement("title" );    

   

   

使用 setText() 方法设置 article 元素的文本。    

   

setText("Java configuration with XML Schema" );    

   

   

在 article 元素中增加 author 元素。    

   

addElement("author" );    

   

   

在 author 元素中增加 firstname 元素并设置该元素的文本。    

   

addElement("firstname" );   

setText("Marcello" );    

   

   

在 author 元素中增加 lastname 元素并设置该元素的文本。    

   

addElement("lastname" );   

setText("Vitaletti" );    

   

   

可以使用 addDocType() 方法添加文档类型说明。    

   

addDocType("catalog" ,  null , "file://c:/Dtds/catalog.dtd" );    

   

   

这样就向 XML 文档中增加文档类型说明:   

   

dtd" >    

   

   

如果文档要使用文档类型定义(DTD)文档验证则必须有 Doctype。   

   

0"  encoding= "UTF-8" ?> 自动添加到 XML 文档中。    

   

java 用于创建 XML 文档 catalog.xml。   

   

 生成 XML 文档 catalog.xml 的程序(XmlDom4J.java)    

dom4j.Document;   

dom4j.DocumentHelper;   

dom4j.Element;   

dom4j.io.XMLWriter;   

io.*;   

public   class  XmlDom4J{   

public   void  generateDocument(){   

createDocument();   

addElement("catalog" );   

addComment("An XML Catalog" );   

addProcessingInstruction("target" , "text" );   

addElement("journal" );   

addAttribute("title" ,  "XML Zone" );   

addAttribute("publisher" ,  "IBM developerWorks" );   

addElement("article" );   

addAttribute("level" ,  "Intermediate" );   

addAttribute("date" ,  "December-2001" );   

addElement("title" );   

setText("Java configuration with XML Schema" );   

addElement("author" );   

addElement("firstname" );   

setText("Marcello" );   

addElement("lastname" );   

setText("Vitaletti" );   

addDocType("catalog" ,   

dtd" );   

    try {   

    XMLWriter output = new  XMLWriter(   

xml" ) ));   

write( document );   

close();   

        }   

out.println(e.getMessage());}   

}   

public   static   void  main(String[] argv){   

XmlDom4J dom4j=new  XmlDom4J();   

generateDocument();   

}}   

    

   

   

这一节讨论了创建 XML 文档的过程,下一节将介绍使用 dom4j API 修改这里创建的 XML 文档。    

   

   

   

    

   

   

 回页首    

    

   

   

   

修改文档   

   

xml。   

   

xml:   

   

SAXReader saxReader = new  SAXReader();   

read(inputXml);    

   

   

dom4j.io 包中。    

   

xml 创建的 java.io.File。使用 XPath 表达式从 article 元素中获得 level 节点列表。如果 level 属性值是“Intermediate”则改为“Introductory”。    

   

selectNodes("//article/@level"  );   

iterator();   

hasNext()){   

next();   

getValue().equals( "Intermediate" ))   

setValue("Introductory" );    

       }    

   

   

获取 article 元素列表,从 article 元素中的 title 元素得到一个迭代器,并修改 title 元素的文本。    

   

selectNodes("//article"  );   

iterator();   

hasNext()){   

next();   

elementIterator("title" );   

hasNext()){   

next();   

getText().equals( "Java configuration with XML Schema" ))   

setText("Create flexible and extensible XML schema" );   

    }}    

   

   

通过和 title 元素类似的过程修改 author 元素。    

   

java 用于把 catalog.xml 文档修改成 catalog-modified.xml 文档。   

   

 用于修改 catalog.xml 的程序(Dom4Jparser.java)    

dom4j.Document;   

dom4j.Element;   

dom4j.Attribute;   

util.List;   

util.Iterator;   

dom4j.io.XMLWriter;   

io.*;   

dom4j.DocumentException;   

dom4j.io.SAXReader;    

public   class  Dom4JParser{   

 public   void  modifyDocument(File inputXml){   

  try {   

   SAXReader saxReader = new  SAXReader();   

read(inputXml);   

selectNodes("//article/@level"  );   

iterator();   

hasNext()){   

next();   

getValue().equals( "Intermediate" ))   

setValue("Introductory" );    

       }   

      

selectNodes("//article/@date"  );   

iterator();   

hasNext()){   

next();   

getValue().equals( "December-2001" ))   

setValue("October-2002" );   

       }   

selectNodes("//article"  );   

iterator();   

hasNext()){   

next();   

elementIterator("title" );   

hasNext()){   

next();   

getText().equals("Java configuration with XML   

      Schema"))   

setText("Create flexible and extensible XML schema" );   

                                          }   

                                }   

selectNodes("//article/author"  );   

iterator();   

hasNext()){   

next();   

elementIterator("firstname" );   

hasNext()){   

next();   

getText().equals( "Marcello" ))   

setText("Ayesha" );   

                                     }   

                              }   

selectNodes("//article/author"  );   

iterator();   

hasNext()){   

next();   

elementIterator("lastname" );   

hasNext()){   

next();   

getText().equals( "Vitaletti" ))   

setText("Malik" );   

                                  }   

                               }   

     XMLWriter output = new  XMLWriter(   

xml" ) ));   

write( document );   

close();   

   }   

    

  catch (DocumentException e)   

                 {   

out.println(e.getMessage());   

                            }   

  catch (IOException e){   

out.println(e.getMessage());   

                    }   

 }   

 public   static   void  main(String[] argv){   

  Dom4JParser dom4jParser=new  Dom4JParser();   

modifyDocument(new  File( "c:/catalog/catalog.xml" ));   

                                        }   

   }  

你可能感兴趣的:(dom4j 使用总结)