使用 dom4j 處理 xml (下)
阿新 • • 發佈:2018-10-31
記錄一些 xpath 的常規用法,備忘。
1 //3、XPath 瞭解(用於在xml中選取元素,類似 jquery 選擇器) 2 //3.1 路徑 3 Node node1 = root.selectSingleNode("/person"); 4 System.out.println(node1.asXML()); 5 6 //3.2 “@” 選取節點屬性(取屬性一般用selectSingleNode) 7 Node node4 = root.selectSingleNode("//person").selectSingleNode("@name");8 System.out.println(node4.asXML()); 9 10 //3.3 “[]” 既可以用作過濾,也可以作下標使用 11 List<Node> nodes1 = root.selectNodes("//person[@cls!='04']"); //從當前路徑找node名為person並且cls屬性值不是04的節點 12 for(Node tmpNode : nodes1) 13 { 14System.out.println(tmpNode.asXML()); 15 } 16 //3.4 小結: 17 -------- 路徑 ------------------- 18 // "//person" “//”表示從當前節點的位置開始(忽略中間路徑),去找後代節點中有無person節點 19 // "//persons//a" 兩個// 20 // "../.." 父節點的父節點 21 // "/person" 從根節點開始找(不忽略中間路徑,要一級一級往下找)。。不僅找不到,還影響後續程式碼的執行。 22 --------- 過濾 和 運算子 ------ 23 // "//person[a]" //從當前路徑找, node名為person,並且 含有a子節點 24 // "//person[@id]" //從當前路徑找 , node名為person, 並且有id屬性 25 // "//person[@age>=24]" = != > >= < <= (但是不支援*=、$=、^=、~=等) 26 // "//person[@age>=24 and @age<30]" 與 27 // "//person[@age>=24][@age<30]" 作用同上 28 // "//person[@age>26 or @age<20]" 或 29 // "//person[not(@age<25)]" 非 30 // "//persons/dog | //persons/person" 返回兩個list的並集("//persons/dog and //persons/person"達不到這樣的效果) 31 ---------- 下標 ------------ 32 // "//person[2]" 取匹配節點中的第2個節點(下標從1開始) 33 // "//person[last()-1]" 取倒數第二個 34 35 ----------- 萬用字元 ----------- 36 // "//person/@name" 匹配所有person節點的name 37 // "//persons/person" 匹配persons下的所有person子節點 38 // "//persons/*" 萬用字元,匹配persons下的所有子節點 ----------- 函式 ----------------- 39 // "/node()" 匹配根節點下的所有節點(包含文字節點和註釋節點)(要注意與"/*"區別) 40 // "//dog/text()" 匹配dog節點下的文字 41 // "//child::node()" 從當前位置開始,遞迴所有後代節點(包含文字節點和註釋節點) 42 // "//child::*" 從當前位置開始,遞迴所有後代節點 43 44 ----------- 有名稱空間的 --------------- 45 // "//namespace::*" 輸出所有的namespace,有重複! 46 // "//*[local-name()='person']" 匹配local-name 為person 的節點,如 ??:person 47 // "//mt:person" 帶上名稱空間就好了 48 // "/cumt:classes/mc:persons/mt:person"
note: 後代節點和子節點 不是一回事,後代節點還包括子節點的子節點的……