leisure

          JAVA - exceed,helloworld
          隨筆 - 50, 文章 - 0, 評論 - 11, 引用 - 0
          數據加載中……

          using dom4j to handle xml 使用dom4j操作xml

          dom4j是一個非常簡單的開源項目。該類庫底層主要借助了Java集合框架,完美地支持對XML,XPath和XSLT的操作!

          xml示例:
          <?xml version="1.0" encoding="gbk"?>
          <games>
              
          <game ID="1">
                  
          <name>極品飛車OL</name>
                  
          <type>網絡游戲</type>
                  
          <score>85</score>
              
          </game>
              
          <game ID="2">
                  
          <name>仙劍奇俠傳5</name>
                  
          <type>單機游戲</type>
                  
          <score>90</score>
              
          </game>
              
          <game ID="3">
                  
          <name>地下城與勇士</name>
                  
          <type>網絡游戲</type>
                  
          <score>75</score>
              
          </game>
          </games>

          一、讀取
                  SAXReader reader = new SAXReader();
                  File file 
          = new File("d:\\games.xml");
                  Document doc 
          = reader.read(file);
          SAXReader支持多種對象的讀取,包括File,Reader,InputStream,URL,InputSource。

          二、查找節點
              1、通過id查找節點:
                  Node node = doc.elementByID("2");
                  
          // <game ID="2"><name>仙劍奇俠傳5</name><type>單機游戲</type></game>        
                  System.out.println(node.asXML());     

              2、通過XPath查找節點
                  Node node = doc.selectSingleNode("/games/game[1]/name");    // game[1]獲取的是第1個節點
                  System.out.println(node.getText());                                          // 極品飛車OL

                  List nodeList = doc.selectNodes("/games/game[score>80]/name");    // 所有分數大于80分的游戲節點下的name節點
                  
          // 極品飛車OL 仙劍奇俠傳5 
                  for(int i = 0; i < nodeList.size(); i++) {
                      Node node 
          = (Node)nodeList.get(i);
                      System.out.println(node.getText());
                  }

              3、獲取父節點
                  Node node = doc.elementByID("1");
                  System.out.println(node.getParent().getName());

          三、移除
              1、移除節點
                  Element element = doc.elementByID("1");
                  Node typeNode 
          = element.selectSingleNode("type");
                  element.remove(typeNode);
                  
          // <game ID="1"><name>極品飛車OL</name><score>85</score></game>
                  System.out.println(element.asXML());

              2、移除屬性
                  Element element = doc.elementByID("1");
                  System.out.println(element.attributeValue(
          "ID"));                    // 1
                  System.out.println(element.remove(element.attribute("ID")));    // true 移除成功 false 移除失敗
                  System.out.println(element.attributeValue("ID"));                    // null

          四、添加與設置
          由于添加(add)和設置(set)方法與第三點移除類似。請穩步直接看API。

          五、輸出xml
                  OutputFormat format = new OutputFormat();
                  format.setEncoding(
          "gbk");            // 設置xml文檔頭編碼 <?xml version="1.0" encoding="gbk"?>
                  XMLWriter writer = new XMLWriter(new FileWriter(new File("d:\\games2.xml")), format);
                  
          // write方法可接受Node、Element、Document、Attribute等對象
                  writer.write(doc);
                  writer.close();                            
          // 必須close才會生成文件

          六、CDATA
                  Element element = new BaseElement("game");
                  element.add(DocumentHelper.createCDATA(
          "戰神"));        // 添加 CDATA數據
                  System.out.println(element.asXML());
                  element.setText(element.getText());                                
          // 清除 CDATA標志
                  System.out.println(element.asXML());

          參考:
          dom4j api
          XPath 教程

          posted on 2011-09-20 00:16 leisure 閱讀(504) 評論(0)  編輯  收藏 所屬分類: java

          主站蜘蛛池模板: 景东| 新源县| 汤原县| 吉隆县| 信宜市| 巴彦淖尔市| 呈贡县| 深泽县| 淮安市| 韶关市| 汕头市| 米泉市| 朝阳市| 辽宁省| 奈曼旗| 左云县| 鄂伦春自治旗| 漳平市| 五大连池市| 合水县| 湖南省| 舞阳县| 五指山市| 沙洋县| 凤翔县| 中牟县| 岳普湖县| 云梦县| 江川县| 稷山县| 宁国市| 富宁县| 台中市| 平湖市| 新津县| 揭阳市| 六盘水市| 庄浪县| 拉萨市| 云林县| 彝良县|