dom4j xpath教程.docx

上传人:b****4 文档编号:26934039 上传时间:2023-06-24 格式:DOCX 页数:22 大小:23.73KB
下载 相关 举报
dom4j xpath教程.docx_第1页
第1页 / 共22页
dom4j xpath教程.docx_第2页
第2页 / 共22页
dom4j xpath教程.docx_第3页
第3页 / 共22页
dom4j xpath教程.docx_第4页
第4页 / 共22页
dom4j xpath教程.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

dom4j xpath教程.docx

《dom4j xpath教程.docx》由会员分享,可在线阅读,更多相关《dom4j xpath教程.docx(22页珍藏版)》请在冰豆网上搜索。

dom4j xpath教程.docx

dom4jxpath教程

学习:

Dom4j和Xpath

1、DOM4J简介

   DOM4J是dom4j.org出品的一个开源XML解析包。

DOM4J应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。

   DOM4J使用起来非常简单。

只要你了解基本的XML-DOM模型,就能使用。

   Dom:

把整个文档作为一个对象。

 DOM4J最大的特色是使用大量的接口。

它的主要接口都在org.dom4j里面定义:

Attribute

定义了XML的属性。

Branch

指能够包含子节点的节点。

如XML元素(Element)和文档(Docuemnts)定义了一个公共的行为

CDATA

定义了XMLCDATA区域

CharacterData

是一个标识接口,标识基于字符的节点。

如CDATA,Comment,Text.

Comment

定义了XML注释的行为

Document

定义了XML文档

DocumentType

定义XMLDOCTYPE声明

Element

定义XML元素

ElementHandler

定义了Element对象的处理器

ElementPath

被ElementHandler使用,用于取得当前正在处理的路径层次信息

Entity

定义XMLentity

Node

为dom4j中所有的XML节点定义了多态行为

NodeFilter

定义了在dom4j节点中产生的一个滤镜或谓词的行为(predicate)

ProcessingInstruction

定义XML处理指令

Text

定义XML文本节点

Visitor

用于实现Visitor模式

XPath

在分析一个字符串后会提供一个XPath表达式

接口之间的继承关系如下:

interfacejava.lang.Cloneable

   interfaceorg.dom4j.Node

          interfaceorg.dom4j.Attribute

          interfaceorg.dom4j.Branch

                 interfaceorg.dom4j.Document

                 interfaceorg.dom4j.Element

          interfaceorg.dom4j.CharacterData

                 interfaceorg.dom4j.CDATA

                 interfaceorg.dom4j.Comment

                 interfaceorg.dom4j.Text

          interfaceorg.dom4j.DocumentType

          interfaceorg.dom4j.Entity

          interfaceorg.dom4j.ProcessingInstruction

2、XML文档操作1

2.1、读取XML文档:

    读写XML文档主要依赖于org.dom4j.io包,有DOMReader和SAXReader两种方式。

因为利用了相同的接口,它们的调用方式是一样的。

publicstaticDocumentload(Stringfilename){

Documentdocument=null;

try{

SAXReadersaxReader=newSAXReader();

document=saxReader.read(newFile(filename)); //读取XML文件,获得document对象

}catch(Exceptionex){

ex.printStackTrace();

}

returndocument;

}  

publicstaticDocumentload(URLurl){

Documentdocument=null;

try{

SAXReadersaxReader=newSAXReader();

document=saxReader.read(url); //读取XML文件,获得document对象

}catch(Exceptionex){

ex.printStackTrace();

}

returndocument;

}

//读取指定的xml文件之后返回一个Document对象,这个对象代表了整个XML文档,用于各种Dom运算。

执照XML文件头所定义的编码来转换。

2.2、获取根节点

根节点是xml分析的开始,任何xml分析工作都需要从根开始

Xmlxml=newXml();

Documentdom=xml.load(path+"/"+file);

Elementroot=dom.getRootElement();

2.3、.新增一个节点以及其下的子节点与数据

ElementmenuElement=root.addElement("menu");

ElementengNameElement=menuElement.addElement("engName");

engNameElement.setText(catNameEn);

ElementchiNameElement=menuElement.addElement("chiName");

chiNameElement.setText(catName);

2.4、写入XML文件

注意文件操作的包装类是乱码的根源

publicstaticbooleandoc2XmlFile(Documentdocument,Stringfilename){

booleanflag=true;

try{

XMLWriterwriter=newXMLWriter(newOutputStreamWriter(newFileOutputStream(filename),"UTF-8"));

writer.write(document);

writer.close();

}catch(Exceptionex){

flag=false;

ex.printStackTrace();

}

System.out.println(flag);

returnflag;

}

 

   Dom4j通过XMLWriter将Document对象表示的XML树写入指定的文件,并使用OutputFormat格式对象指定写入的风格和编码方法。

调用OutputFormat.createPrettyPrint()方法可以获得一个默认的prettyprint风格的格式对象。

对OutputFormat对象调用setEncoding()方法可以指定XML文件的编码方法。

 

publicvoidwriteTo(OutputStreamout,Stringencoding)throwsUnsupportedEncodingException,IOException{

       OutputFormatformat=OutputFormat.createPrettyPrint();

       format.setEncoding("gb2312");

       XMLWriterwriter=newXMLWriter(System.out,format);

       writer.write(doc);

       writer.flush();

       return;

}

2.5、遍历xml节点

     对Document对象调用getRootElement()方法可以返回代表根节点的Element对象。

拥有了一个Element对象后,可以对该对象调用elementIterator()方法获得它的子节点的Element对象们的一个迭代器。

使用(Element)iterator.next()方法遍历一个iterator并把每个取出的元素转化为Element类型。

publicbooleanisOnly(StringcatNameEn,HttpServletRequestrequest,Stringxml){

booleanflag=true;

Stringpath=request.getRealPath("");

Documentdoc=load(path+"/"+xml);

Elementroot=doc.getRootElement();

for(Iteratori=root.elementIterator();i.hasNext();){

Elementel=(Element)i.next();

if(catNameEn.equals(el.elementTextTrim("engName"))){

flag=false;

break;

}

}

returnflag;

}

2.6、创建xml文件

publicstaticvoidmain(Stringargs[]){

StringfileName="c:

/text.xml";

Documentdocument=DocumentHelper.createDocument();//建立document对象,用来操作xml文件

ElementbooksElement=document.addElement("books");//建立根节点

booksElement.addComment("Thisisatestfordom4j");//加入一行注释

ElementbookElement=booksElement.addElement("book");//添加一个book节点

bookElement.addAttribute("show","yes");//添加属性内容

ElementtitleElement=bookElement.addElement("title");//添加文本节点

titleElement.setText("ajaxinaction");//添加文本内容

try{

XMLWriterwriter=newXMLWriter(newFileWriter(newFile(fileName)));

writer.write(document);

writer.close();

}catch(Exceptione){

e.printStackTrace();

}

}

2.7、修改节点属性

public static void modifyXMLFile(){

StringoldStr="c:

/text.xml";

StringnewStr="c:

/text1.xml";

Documentdocument= null;

//修改节点的属性

try {

SAXReadersaxReader= new SAXReader();//用来读取xml文档

document=saxReader.read(new File(oldStr));//读取xml文档

List list=document.selectNodes("/books/book/@show");//用xpath查找节点book的属性

Iterator iter=list.iterator();

while (iter.hasNext()){

Attributeattribute=(Attribute)iter.next();

if (attribute.getValue().equals("yes"))

   attribute.setValue("no");

}

} catch (Exceptione){

   e.printStackTrace();

}

//修改节点的内容

try {

SAXReadersaxReader= new SAXReader();//用来读取xml文档

document=saxReader.read(new File(oldStr));//读取xml文档

List list=document.selectNodes("/books/book/title");//用xpath查找节点book的内容

Iterator iter=list.iterator();

while (iter.hasNext()){

Elementelement=(Element)iter.next();

element.setText("xxx");//设置相应的内容

}

} catch (Exceptione){

   e.printStackTrace();

}

 

try {

XMLWriterwriter= new XMLWriter(new FileWriter(new File(newStr)));

writer.write(document);

writer.close();

} catch (Exceptionex){

   ex.printStackTrace();

}

}

2.8、删除节点

public static void removeNode(){

StringoldStr="c:

/text.xml";

StringnewStr="c:

/text1.xml";

Documentdocument= null;

try {

SAXReadersaxReader= new SAXReader();//用来读取xml文档

document=saxReader.read(new File(oldStr));//读取xml文档

List list=document.selectNodes("/books/book");//用xpath查找对象

Iterator iter=list.iterator();

while (iter.hasNext()){

ElementbookElement=(Element)iter.next();

//创建迭代器,用来查找要删除的节点,迭代器相当于指针,指向book下所有的title节点

Iterator iterator=bookElement.elementIterator("title");

while (iterator.hasNext()){

ElementtitleElement=(Element)iterator.next();

if (titleElement.getText().equals("ajaxinaction")){

bookElement.remove(titleElement);

}

}

}

} catch (Exceptione){

e.printStackTrace();

}

try {

XMLWriterwriter= new XMLWriter(new FileWriter(new File(newStr)));

writer.write(document);

writer.close();

} catch (Exceptionex){

ex.printStackTrace();

}

}

 

2、XML文档操作2

2.1、Document对象相关       

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

      SAXReaderreader=newSAXReader(); 

     Document  document=reader.read(newFile("input.xml"));     

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

            Stringtext="";     

             Documentdocument=DocumentHelper.parseText(text);     

3、主动创建document对象.     

            Documentdocument=DocumentHelper.createDocument();     

             Elementroot=document.addElement("members");//创建根节点     

2.2、节点相关       

1、获取文档的根节点.     

ElementrootElm=document.getRootElement();     

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

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

3.取得节点的文字     

Stringtext=memberElm.getText();    

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

4.取得某节点下指定名称的所有节点并进行遍历.     

Listnodes=rootElm.elements("member");     

for(Iteratorit=nodes.iterator();it.hasNext();){     

    Elementelm=(Element)it.next();     

   //dosomething     

}     

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

           for(Iteratorit=root.elementIterator();it.hasNext();){     

                 Elementelement=(Element)it.next();     

                //dosomething     

             }     

6.在某节点下添加子节点.     

ElementageElm=newMemberElm.addElement("age");     

7.设置节点文字.     

ageElm.setText("29");     

8.删除某节点.     

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

9.添加一个CDATA节点.     

        ElementcontentElm=infoElm.addElement("content");     

         contentElm.addCDATA(diary.getContent());     

      

2.3、属性相关.     

1.取得节点的指定的属性     

            Elementroot=document.getRootElement();         

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

2.取得属性的文字     

   Stringtext=attribute.getText();   

Stringtext2=root.element("name").attributeValue("firstname");

//这个是取得根节点下name字节点的firstname属性的值.     

3.遍历某节点的所有属性     

Elementroot=document.getRootElement();

for(Iteratorit=root.attributeIterator();it.hasNext();){

Attributeattribute=(Attribute)it.next();

Stringtext=attribute.getText();

System.out.println(text);

}

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

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

5.设置属性的文字     

            Attributeattribute=root.attribute("name");     

             attribute.setText("sitinspring");     

6.删除某属性     

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

             root.remove(attribute);     

2.4、将文档写入XML文件.     

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

XMLWriterwriter=newXMLWriter(newFileWriter("output.xml"));     

writer.write(document);     

writer.close();     

2.文档中含有中文,设置编码格式再写入.     

OutputFormatformat=OutputFormat.createPrettyPrint();

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

XMLWriterwriter=newXMLWriter(newFileWriter("output.xml"),format);

writer.write(document);

writer.close();

2.5、字符串与XML的转换     

1.将字符串转化为XML     

Stringtext="sitinspring";     

Documentdocument=DocumentHelper.parseText(text);     

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

SAXReaderr

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 营销活动策划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1