黑马程序员技术交流社区

标题: XPatch [打印本页]

作者: hejinzhong    时间: 2014-8-23 21:47
标题: XPatch
本帖最后由 hejinzhong 于 2014-8-26 12:43 编辑

  1. /**xpath就是选择XML文件中节点的方法。
  2. (1)所谓节点(node),就是XML文件的最小构成单位,一共分成7种。
  3. - element(元素节点)
  4. - attribute(属性节点)
  5. - text (文本节点)
  6. - namespace (名称空间节点)
  7. - processing-instruction (处理命令节点)
  8. - comment (注释节点)
  9. (2)xpath通过"路径表达式"(Path Expression)来选择节点。在形式上,"路径表达式"与传统的文件系统非常类似。

  10. # 斜杠(/)作为路径内部的分割符。

  11. # 同一个节点有绝对路径和相对路径两种写法。

  12. # 绝对路径(absolute path)必须用"/"起首,后面紧跟根节点,比如/step/step/...。

  13. # 相对路径(relative path)则是除了绝对路径以外的其他写法,比如 step/step,也就是不使用"/"起首。

  14. # "."表示当前节点。

  15. # ".."表示当前节点的父节点

  16. (3)选择节点的基本规则
  17. - nodename(节点名称):表示选择该节点的所有子节点

  18. - "/":表示选择根节点

  19. - "//":表示选择任意位置的某个节点

  20. - "@": 表示选择某个属性

  21. */

  22. package com.heima;

  23. import java.io.*;
  24. import java.util.*;

  25. import org.dom4j.*;
  26. import org.dom4j.io.*;
  27. import org.junit.*;

  28. public class XPatch {
  29.         
  30.         private Document dm;

  31.         /*Xpatch可以根据路径直接找到想要的节点
  32.          * 这种方式查找快速准确简洁
  33.          */
  34.         
  35.         @Before
  36.         public void getRoot() throws Exception{
  37.                 SAXReader sr = new SAXReader();
  38.                 dm = sr.read("src/book.xml");
  39.         }
  40.         
  41. //        获取某个节点
  42.         @Test
  43.         public void Test1(){
  44.                 Node aNode = dm.selectSingleNode("/书架/书[1]/作者");
  45.                 System.out.println(aNode.getText());
  46.         }
  47.         
  48. //        遍历所有元素节点
  49.         @Test
  50.         public void Test2(){
  51.                 @SuppressWarnings("unchecked")
  52.                 List<Node> list = dm.selectNodes("//*");
  53.                 for (Node node : list) {
  54.                         if(node.getNodeType()==1){
  55.                                 System.out.println(node.getName());
  56.                         }
  57.                 }
  58.         }
  59.         
  60. //        修改某个元素节点的主体内容
  61.         @Test
  62.         public void test3() {
  63.                 Node sNode = dm.selectSingleNode("/书架/书[1]/售价");
  64.                 sNode.setText("50");
  65.                
  66.                 XMLWriter();
  67.         }
  68.         
  69. //        向指定元素节点中增加子元素节点
  70.         @Test
  71.         public void test4() {
  72.                 Node node = dm.selectSingleNode("/书架/书[1]/售价");
  73.                 ((Element)node).addElement("内部价").setText("20");
  74.                
  75.                 XMLWriter();
  76.         }

  77.         
  78. //        向指定元素节点上增加同级元素节点
  79.         @Test
  80.         public void test5() {
  81.                 Node node = dm.selectSingleNode("/书架/书[1]");
  82.                 ((Element)node).addElement("批发价").setText("80");
  83.                
  84.                 XMLWriter();
  85.         }
  86. //        删除指定元素节点
  87.         @Test
  88.         public void test6() {
  89.                 Node node = dm.selectSingleNode("/书架/书[1]/售价/内部价");
  90.                 node.getParent().remove(node);
  91.                
  92.                 XMLWriter();
  93.         }
  94. //        操作XML文件属性
  95.         @Test
  96.         public void test7() {
  97.                 Element node = (Element) dm.selectSingleNode("/书架/书[1]");
  98.                 node.addAttribute("ISBN", "黑马程序员");
  99.                
  100.                 XMLWriter();
  101.         }
  102.         
  103.         
  104.         public void XMLWriter() {
  105.                 try {
  106.                         XMLWriter xw = new XMLWriter(new FileOutputStream("src/book.xml"),
  107.                                         OutputFormat.createPrettyPrint());
  108.                         xw.write(dm);
  109.                         xw.close();
  110.                 } catch (Exception e) {
  111.                         
  112.                 }
  113.         }
  114. }
复制代码


作者: 天黑偷牛    时间: 2014-8-26 12:32
加油,加油




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2