posts - 19, comments - 53, trackbacks - 0, articles - 283
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          dom4j 修改 xml

          Posted on 2009-07-28 21:54 Gavin.lee 閱讀(363) 評(píng)論(0)  編輯  收藏 所屬分類: xml doc 操作
          來(lái)自IBM的文章,感覺不錯(cuò),剛開始使用XPath的時(shí)候,不知道還要jaxen.jar包,郁悶了好半天,呵

          //    使用dom4j解析XML時(shí),要快速獲取某個(gè)節(jié)點(diǎn)的數(shù)據(jù),使用XPath是個(gè)不錯(cuò)的方法,dom4j的快速手冊(cè)里也建議使用這種方式
          //    執(zhí)行時(shí)卻拋出以下異常:
          //
          //    Exception in thread "main" java.lang.NoClassDefFoundError: org/jaxen/JaxenException
          //    at org.dom4j.DocumentFactory.createXPath(DocumentFactory.java:230)
          //    at org.dom4j.tree.AbstractNode.createXPath(AbstractNode.java:207)
          //    at org.dom4j.tree.AbstractNode.selectNodes(AbstractNode.java:164)
          //
          //    不光要有dom4j這個(gè)包,還要有jaxen包:<jaxen-1.1-beta-6.jar>-238 KB,這應(yīng)該是dom4j的基礎(chǔ)包,在dom4j的zip包的lib目錄里可以找到。即使用這個(gè)方法需要以下兩個(gè)包:
          //    dom4j-1.6.1.jar-306 KB
          //    jaxen-1.1-beta-6.jar-238 KB

          修改前
          <?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>

          修改后
          <?xml version="1.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>

          解析器
          package com.Gavin.tools.xml;

          import java.io.File;
          import java.io.FileWriter;
          import java.io.IOException;
          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 TestDom4jChange {
              
          public void modifyDocument(File inputXml) {
                  
          try {
                      SAXReader saxReader 
          = new SAXReader();
                      Document document 
          = saxReader.read(inputXml);
                      List list 
          = document.selectNodes("//article/@level");
                      Iterator iter 
          = list.iterator();
                      
          while (iter.hasNext()) {
                          Attribute attribute 
          = (Attribute) iter.next();
                          
          if (attribute.getValue().equals("Intermediate"))
                              attribute.setValue(
          "Introductory");
                      }


                      list 
          = document.selectNodes("//article/@date");
                      iter 
          = list.iterator();
                      
          while (iter.hasNext()) {
                          Attribute attribute 
          = (Attribute) iter.next();
                          
          if (attribute.getValue().equals("December-2001"))
                              attribute.setValue(
          "October-2002");
                      }

                      list 
          = document.selectNodes("//article");
                      iter 
          = list.iterator();
                      
          while (iter.hasNext()) {
                          Element element 
          = (Element) iter.next();
                          Iterator iterator 
          = element.elementIterator("title");
                          
          while (iterator.hasNext()) {
                              Element titleElement 
          = (Element) iterator.next();
                              
          if (titleElement.getText().equals("Java configuration with XML Schema"))
                                  titleElement.setText(
          "Create flexible and extensible XML schema");
                          }

                      }

                      list 
          = document.selectNodes("//article/author");
                      iter 
          = list.iterator();
                      
          while (iter.hasNext()) {
                          Element element 
          = (Element) iter.next();
                          Iterator iterator 
          = element.elementIterator("firstname");
                          
          while (iterator.hasNext()) {
                              Element firstNameElement 
          = (Element) iterator.next();
                              
          if (firstNameElement.getText().equals("Marcello"))
                                  firstNameElement.setText(
          "Ayesha");
                          }

                      }

                      list 
          = document.selectNodes("//article/author");
                      iter 
          = list.iterator();
                      
          while (iter.hasNext()) {
                          Element element 
          = (Element) iter.next();
                          Iterator iterator 
          = element.elementIterator("lastname");
                          
          while (iterator.hasNext()) {
                              Element lastNameElement 
          = (Element) iterator.next();
                              
          if (lastNameElement.getText().equals("Vitaletti"))
                                  lastNameElement.setText(
          "Malik");
                          }

                      }

                      XMLWriter output 
          = new XMLWriter(new FileWriter(new File("c:/catalog/catalog-modified.xml")));
                      output.write(document);
                      output.close();
                  }


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

              }


              
          public static void main(String[] argv) {
                  TestDom4jChange dom4jParser 
          = new TestDom4jChange();
                  dom4jParser.modifyDocument(
          new File("c:/catalog/catalog.xml"));
              }

          }

          主站蜘蛛池模板: 宁化县| 巫山县| 周至县| 宜城市| 凤城市| 定安县| 定边县| 河津市| 南召县| 庆元县| 陆川县| 文化| 阿鲁科尔沁旗| 佛坪县| 太保市| 滦南县| 巨鹿县| 阜康市| 叶城县| 泽普县| 长宁县| 西安市| 绥宁县| 葫芦岛市| 四川省| 姜堰市| 崇文区| 贵定县| 上高县| 久治县| 开封市| 台南市| 恩施市| 伊春市| 兴仁县| 焉耆| 桐庐县| 瓦房店市| 三门县| 广丰县| 武汉市|