dom4j 有一個很大的優點,可以支持xPath表達式.
下面,以上篇文章中的,ibm.xml爲例,總結一下,修改ibm.xml.
ibm.xml代碼如下:
- <?xml version="1.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>
演示代碼如下:
- package org.james.dom4j;
- import java.io.File;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.Iterator;
- import java.util.List;
- import org.dom4j.Attribute;
- import org.dom4j.Document;
- import org.dom4j.DocumentException;
- import org.dom4j.Element;
- import org.dom4j.io.SAXReader;
- import org.dom4j.io.XMLWriter;
- public class UpdateXML {
- /**
- * @param args
- */
- @SuppressWarnings("unchecked")
- public static void main(String[] args) {
- SAXReader saxReader = new SAXReader();
- InputStream in=UpdateXML.class.getClassLoader().getResourceAsStream("ibm.xml");
- XMLWriter xmlWriter=null;
- try {
- Document doc=saxReader.read(in);
- List<Element> list = doc.selectNodes("//journal/article");//得到article元素列表.
- Iterator<Element> it = list.iterator();
- while(it.hasNext()){
- Element elem= it.next();
- Attribute attri=elem.attribute("level");
- if(attri.getValue().equals("Intermediate")){//將article元素的屬性修改爲Introductory
- attri.setValue("Introductory");
- }
- }
- List<Element> listArticle=doc.selectNodes("//journal/article");
- Iterator<Element> itAtricle=listArticle.iterator();
- while(itAtricle.hasNext()){//迭代修改每個article元素的title子節點的文本.
- Element elemArticle = itAtricle.next();
- Iterator<Element> itetor= elemArticle.elementIterator("title");
- while(itetor.hasNext()){
- Element titleElem=itetor.next();
- if("Java configuration with XML Schema".equals(titleElem.getText())){
- titleElem.setText("Hell Chenyang");
- }
- }
- }
- xmlWriter = new XMLWriter(new FileWriter(new File("E://update_ibm.xml")));
- xmlWriter.write(doc);
- } catch (DocumentException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }finally{
- if(xmlWriter!=null){
- try {
- xmlWriter.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
- }