使用 dom4j 解析 XML.docx
- 文档编号:7633153
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:11
- 大小:18.41KB
使用 dom4j 解析 XML.docx
《使用 dom4j 解析 XML.docx》由会员分享,可在线阅读,更多相关《使用 dom4j 解析 XML.docx(11页珍藏版)》请在冰豆网上搜索。
使用dom4j解析XML
使用dom4j解析XML
使用domj4API创建与修改XML文档
DeepakVohra(dvohra09@)是一位Web开发人员、NuBean顾问和Sun认证的Java1.4程序员。
可以通过dvohra09@与他联系。
简介:
dom4j是一种解析XML文档的开放源代码XML框架。
本文介绍如何使用包含在dom4j中的解析器创建并修改XML文档。
本文的标签:
dom,dom4j,java,xml,使用,解析
dom4jAPI包含一个解析XML文档的工具。
本文中将使用这个解析器创建一个示例XML文档。
清单1显示了这个示例XML文档,catalog.xml。
清单1.示例XML文档(catalog.xml)
xmlversion="1.0"encoding="UTF-8"?
>
--AnXMLCatalog-->
targetinstruction?
>
publisher="IBMdeveloperWorks">
然后使用同一个解析器修改catalog.xml,清单2是修改后的XML文档,catalog-modified.xml。
清单2.修改后的XML文档(catalog-modified.xml)
xmlversion="1.0"encoding="UTF-8"?
>
--AnXMLcatalog-->
targetinstruction?
>
publisher="IBMdeveloperWorks">
与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解析器。
结束语
包含在dom4j中的解析器是一种用于解析XML文档的非验证性工具,可以与JAXP、Crimson或Xerces集成。
本文说明了如何使用该解析器创建和修改XML文档。
参考资料
∙您可以参阅本文在developerWorks全球站点上的英文原文.
∙请访问dom4jWeb站点,那里有一个很有用的FAQ。
∙阅读XML.com上的文章“dom4j:
theflexibleXMLframeworkforJava”。
∙通过DennisSosnoski的developerWorks文章“文档模型,第一部分:
性能”(2001年9月)和“Java文档模型的用法”(2002年2月)进一步研究dom4j。
∙通过ElliotteRustyHarold的“ProcessingXMLwithJava”了解如何编制读写XML文档的Java程序。
∙在developerWorksXML和Web服务专区可以找到更多的XML资源。
也可以订阅每周一期的Web服务/XML技巧新闻邮件。
∙在developerWorksDeveloperBookstore可以找到各种关于XML的书籍。
∙了解如何才能成为一名IBM认证的XML及相关技术的开发人员。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 使用 dom4j 解析 XML