dom4j解析xml实例.docx

上传人:b****6 文档编号:7354085 上传时间:2023-01-23 格式:DOCX 页数:10 大小:17.24KB
下载 相关 举报
dom4j解析xml实例.docx_第1页
第1页 / 共10页
dom4j解析xml实例.docx_第2页
第2页 / 共10页
dom4j解析xml实例.docx_第3页
第3页 / 共10页
dom4j解析xml实例.docx_第4页
第4页 / 共10页
dom4j解析xml实例.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

dom4j解析xml实例.docx

《dom4j解析xml实例.docx》由会员分享,可在线阅读,更多相关《dom4j解析xml实例.docx(10页珍藏版)》请在冰豆网上搜索。

dom4j解析xml实例.docx

dom4j解析xml实例

使用dom4j解析XML使用domj4API创建与修改XML文档

简介:

dom4j是一种解析XML文档的开放源代码XML框架。

本文介绍如何使用包含在dom4j中的解析器创建并修改XML文档。

dom4jAPI包含一个解析XML文档的工具。

本文中将使用这个解析器创建一个示例XML文档。

清单1显示了这个示例XML文档,catalog.xml。

清单1.示例XML文档(catalog.xml)

 

xmlversion="1.0"encoding="UTF-8"?

>

--AnXMLCatalog-->

targetinstruction?

>

publisher="IBMdeveloperWorks">

JavaconfigurationwithXMLSchema

Marcello

Vitaletti

 

然后使用同一个解析器修改catalog.xml,清单2是修改后的XML文档,catalog-modified.xml。

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

 

xmlversion="1.0"encoding="UTF-8"?

>

--AnXMLcatalog-->

targetinstruction?

>

publisher="IBMdeveloperWorks">

CreateflexibleandextensibleXMLschemas

Ayesha

Malik

 

与W3CDOMAPI相比,使用dom4j所包含的解析器的好处是dom4j拥有本地的XPath支持。

DOM解析器不支持使用XPath选择节点。

本文包括以下几个部分:

预先设置

创建文档

修改文档

预先设置

这个解析器可以从http:

//dom4j.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接口。

 

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

回页首

创建文档

本节讨论使用dom4jAPI创建XML文档的过程,并创建示例XML文档catalog.xml。

使用import语句导入dom4jAPI类:

importorg.dom4j.Document;

importorg.dom4j.DocumentHelper;

importorg.dom4j.Element;

 

使用DocumentHelper类创建一个文档实例。

DocumentHelper是生成XML文档节点的dom4jAPI工厂类。

Documentdocument=DocumentHelper.createDocument();

 

使用addElement()方法创建根元素catalog。

addElement()用于向XML文档中增加元素。

ElementcatalogElement=document.addElement("catalog");

 

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

catalogElement.addComment("AnXMLcatalog");

 

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

catalogElement.addProcessingInstruction("target","text");

 

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

ElementjournalElement=catalogElement.addElement("journal");

 

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

journalElement.addAttribute("title","XMLZone");

journalElement.addAttribute("publisher","IBMdeveloperWorks");

 

向article元素中添加journal元素。

ElementarticleElement=journalElement.addElement("article");

 

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

articleElement.addAttribute("level","Intermediate");

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

 

向article元素中增加title元素。

ElementtitleElement=articleElement.addElement("title");

 

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

titleElement.setText("JavaconfigurationwithXMLSchema");

 

在article元素中增加author元素。

ElementauthorElement=articleElement.addElement("author");

 

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

ElementfirstNameElement=authorElement.addElement("firstname");

firstNameElement.setText("Marcello");

 

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

ElementlastNameElement=authorElement.addElement("lastname");

lastNameElement.setText("Vitaletti");

 

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

document.addDocType("catalog",null,"file:

//c:

/Dtds/catalog.dtd");

 

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

DOCTYPEcatalogSYSTEM"file:

//c:

/Dtds/catalog.dtd">

 

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

XML声明

xmlversion="1.0"encoding="UTF-8"?

>自动添加到XML文档中。

清单3所示的例子程序XmlDom4J.java用于创建XML文档catalog.xml。

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

 

importorg.dom4j.Document;

importorg.dom4j.DocumentHelper;

importorg.dom4j.Element;

importorg.dom4j.io.XMLWriter;

importjava.io.*;

publicclassXmlDom4J{

publicvoidgenerateDocument(){

Documentdocument=DocumentHelper.createDocument();

ElementcatalogElement=document.addElement("catalog");

catalogElement.addComment("AnXMLCatalog");

catalogElement.addProcessingInstruction("target","text");

ElementjournalElement=catalogElement.addElement("journal");

journalElement.addAttribute("title","XMLZone");

journalElement.addAttribute("publisher","IBMdeveloperWorks");

ElementarticleElement=journalElement.addElement("article");

articleElement.addAttribute("level","Intermediate");

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

ElementtitleElement=articleElement.addElement("title");

titleElement.setText("JavaconfigurationwithXMLSchema");

ElementauthorElement=articleElement.addElement("author");

ElementfirstNameElement=authorElement.addElement("firstname");

firstNameElement.setText("Marcello");

ElementlastNameElement=authorElement.addElement("lastname");

lastNameElement.setText("Vitaletti");

document.addDocType("catalog",

null,"file:

//c:

/Dtds/catalog.dtd");

try{

XMLWriteroutput=newXMLWriter(

newFileWriter(newFile("c:

/catalog/catalog.xml")));

output.write(document);

output.close();

}

catch(IOExceptione){System.out.println(e.getMessage());}

}

publicstaticvoidmain(String[]argv){

XmlDom4Jdom4j=newXmlDom4J();

dom4j.generateDocument();

}}

 

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

 

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

回页首

修改文档

这一节说明如何使用dom4jAPI修改示例XML文档catalog.xml。

使用SAXReader解析XML文档catalog.xml:

SAXReadersaxReader=newSAXReader();

Documentdocument=saxReader.read(inputXml);

 

SAXReader包含在org.dom4j.io包中。

inputXml是从c:

/catalog/catalog.xml创建的java.io.File。

使用XPath表达式从article元素中获得level节点列表。

如果level属性值是“Intermediate”则改为“Introductory”。

Listlist=document.selectNodes("//article/@level");

Iteratoriter=list.iterator();

while(iter.hasNext()){

Attributeattribute=(Attribute)iter.next();

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

attribute.setValue("Introductory");

}

 

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

list=document.selectNodes("//article");

iter=list.iterator();

while(iter.hasNext()){

Elementelement=(Element)iter.next();

Iteratoriterator=element.elementIterator("title");

while(iterator.hasNext()){

ElementtitleElement=(Element)iterator.next();

if(titleElement.getText().equals("JavaconfigurationwithXMLSchema"))

titleElement.setText("CreateflexibleandextensibleXMLschema");

}}

 

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

清单4所示的示例程序Dom4JParser.java用于把catalog.xml文档修改成catalog-modified.xml文档。

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

 

importorg.dom4j.Document;

importorg.dom4j.Element;

importorg.dom4j.Attribute;

importjava.util.List;

importjava.util.Iterator;

importorg.dom4j.io.XMLWriter;

importjava.io.*;

importorg.dom4j.DocumentException;

importorg.dom4j.io.SAXReader;

publicclassDom4JParser{

publicvoidmodifyDocument(FileinputXml){

try{

SAXReadersaxReader=newSAXReader();

Documentdocument=saxReader.read(inputXml);

Listlist=document.selectNodes("//article/@level");

Iteratoriter=list.iterator();

while(iter.hasNext()){

Attributeattribute=(Attribute)iter.next();

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

attribute.setValue("Introductory");

}

list=document.selectNodes("//article/@date");

iter=list.iterator();

while(iter.hasNext()){

Attributeattribute=(Attribute)iter.next();

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

attribute.setValue("October-2002");

}

list=document.selectNodes("//article");

iter=list.iterator();

while(iter.hasNext()){

Elementelement=(Element)iter.next();

Iteratoriterator=element.elementIterator("title");

while(iterator.hasNext()){

ElementtitleElement=(Element)iterator.next();

if(titleElement.getText().equals("JavaconfigurationwithXML

Schema"))

titleElement.setText("CreateflexibleandextensibleXMLschema");

}

}

list=document.selectNodes("//article/author");

iter=list.iterator();

while(iter.hasNext()){

Elementelement=(Element)iter.next();

Iteratoriterator=element.elementIterator("firstname");

while(iterator.hasNext()){

ElementfirstNameElement=(Element)iterator.next();

if(firstNameElement.getText().equals("Marcello"))

firstNameElement.setText("Ayesha");

}

}

list=document.selectNodes("//article/author");

iter=list.iterator();

while(iter.hasNext()){

Elementelement=(Element)iter.next();

Iteratoriterator=element.elementIterator("lastname");

while(iterator.hasNext()){

ElementlastNameElement=(Element)iterator.next();

if(lastNameElement.getText().equals("Vitaletti"))

lastNameElement.setText("Malik");

}

}

XMLWriteroutput=newXMLWriter(

newFileWriter(newFile("c:

/catalog/catalog-modified.xml")));

output.write(document);

output.close();

}

catch(DocumentExceptione)

{

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

}

catch(IOExceptione){

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

}

}

publicstaticvoidmain(String[]argv){

Dom4JParserdom4jParser=newDom4JParser();

dom4jParser.modifyDocument(newFile("c:

/catalog/catalog.xml"));

}

}

 

这一节说明了如何使用dom4j中的解析器修改示例XML文档。

这个解析器不使用DTD或者模式验证XML文档。

如果XML文档需要验证,可以解释用dom4j与JAXPSAX解析器。

 

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

当前位置:首页 > 小学教育 > 语文

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

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