XPATH鍩虹
聽聽聽聽聽聽 XPATH閬靛驚鏂囨。瀵硅薄妯″瀷(DOM)鐨勮礬寰勬牸寮忥紝鍩烘湰璇硶鐢辮〃杈懼紡鏋勬垚銆傚湪璁$畻琛ㄨ揪寮忕殑鍊間箣鍚庝駭鐢熶竴涓璞★紝榪欑瀵硅薄鏈変互涓嬪洓縐嶅熀鏈被鍨嬶細鑺傜偣闆嗗悎銆佸竷?yōu)當鍨嬨佹暟瀛楀瀷鍜屽瓧絎?/font>
涓插瀷銆俋PATH鍩烘湰涓婂拰鍦ㄦ枃浠剁郴緇熶腑瀵繪壘鏂囦歡綾諱技錛屽鏋滆礬寰勬槸浠?/"寮澶寸殑錛屽氨琛ㄦ槑璇ヨ礬寰勮〃紺虹殑鏄竴涓粷瀵硅礬寰勶紝榪欏拰鍦║NIX緋葷粺涓叧浜庢枃浠惰礬寰勭殑瀹氫箟鏄竴鑷寸殑銆備互"http://"寮澶?/font>
鍒欒〃紺哄湪鏂囨。涓殑浠繪剰浣嶇疆鏌ユ壘銆?br />聽聽聽聽聽聽 浠ユ牱渚媂ML鏂囨。錛坒riends.xml錛変負渚嬫潵浜嗚ВXPATH錛?

xml鏂囦歡
聽聽<?xml聽version="1.0"聽encoding="UTF-8"?>
聽聽聽聽聽聽聽<friends聽comment="Friends聽List">
聽聽聽聽聽聽聽聽聽聽聽<friend聽number="1">
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽<name>zoof</name>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽<sex聽value="male"聽/>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽<phone>87654321</phone>
聽聽聽聽聽聽聽聽聽聽聽聽</friend>
聽聽聽聽聽聽聽聽聽聽聽聽<friend聽number="2">
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽<name>joe</name>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽<sex聽value="male"聽/>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽<phone>87654322</phone>
聽聽聽聽聽聽聽聽聽聽聽聽</friend>
聽聽聽聽聽聽聽聽聽聽聽聽<friend聽number="3">
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽<name>joe</name>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽<sex聽value="female"聽/>
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽<phone>87654323</phone>
聽聽聽聽聽聽聽聽聽聽聽聽</friend>
聽聽聽聽聽聽聽聽</friends>

聽聽聽聽聽
鍦╔ML鏂囨。涓嬌鐢ㄤ綅緗礬寰勮〃杈懼紡鏉ユ煡鎵句俊鎭紝榪欎簺琛ㄨ揪寮忔湁寰堝縐嶇粍鎴愭柟寮忋備竴鑸垜浠敤寰楁渶澶氱殑鎭愭曟槸 鑺傜偣鍏冪礌 鏌ユ壘銆俋PATH涓敤姝f枩鏉狅紙/錛夋潵鍒嗛殧瀛愮粨鐐癸紝榪斿洖鎵鏈変笌
妯″紡鐩稿尮閰嶇殑鍏冪礌銆備笅闈互鍑犱釜 琛ㄨ揪寮?鐨勪緥瀛愭潵璇存槑涓涓嬭繑鍥炵粨鏋滐細
聽聽聽聽聽 琛ㄨ揪寮忥細/friends/friend
聽聽聽聽聽 榪斿洖錛氭牴鍏冪礌friends涓嬫墍鏈夌殑 friend 鍏冪礌錛堟垨鑺傜偣錛夈傦紙褰撶劧鏈緥鍙湁涓涓暒錛侊級
聽
聽聽聽聽聽 琛ㄨ揪寮忥細/friends/*
聽聽聽聽聽 榪斿洖錛氭牴鍏冪礌friends涓嬫墍鏈夌殑鍏冪礌錛堟垨鑺傜偣錛夈傦紙鈥?鈥濈浉褰撲簬閫氶厤絎︼紝琛ㄧず鈥滄墍鏈夆濈殑錛?/font>
聽
聽聽聽聽聽 琛ㄨ揪寮忥細//friend
聽聽聽聽 聽榪斿洖錛氫換鎰忓厓绱狅紙鎴栬妭鐐癸級涓嬬殑鎵鏈?friend 鍏冪礌錛堟垨鑺傜偣錛夈傦紙娉ㄦ剰錛氫笉浠呬粎鏄?涓?鏍瑰厓绱爁riends涓嬮潰鐨刦riend鍏冪礌,濡傛灉瀛樺湪鐨勮瘽錛?/font>
聽
聽聽聽聽聽 琛ㄨ揪寮忥細/friends/friend[@number='1']
聽聽聽聽 聽榪斿洖錛氭牴鍏冪礌涓嬪厓绱犲悕縐頒負 friend錛宯umber灞炴т負'1'鐨勫叏閮ㄥ厓绱狅紙鎴栬妭鐐癸級銆傦紙瀵逛簬鍏冪礌鎴栬妭鐐圭殑闄勫姞鍏冪礌錛屾瘮濡傚睘鎬э紝鍑芥暟絳夐兘瑕佺敤鏂規(guī)嫭鍙?[]"鎵╄搗鏉ワ紝灞炴у墠闈㈣鍔?/font>
涓?@"鍙鳳級
聽
聽聽聽聽聽 琛ㄨ揪寮忥細/friends/friend/phone[text()='87654321']
聽聽聽聽聽 榪斿洖錛氬厓绱爁riends/friend涓嬬數(shù)璇濆彿鐮佷負 87654321 鐨勫叏閮ㄥ厓绱犮傦紙text()鏄疿PATH鐨勫嚱鏁幫紝鍔熻兘鏄彇鍑哄綋鍓嶈妭鐐圭殑鏂囨湰鍐呭錛屽嵆content銆傦級
聽
聽聽聽聽聽 琛ㄨ揪寮忥細//name/parent::*
聽聽聽聽聽 榪斿洖錛歯ame鍏冪礌鐨勬墍鏈夌埗鍏冪礌錛堟垨鑺傜偣錛夈?parent::* 琛ㄧず榪欎釜鍏冪礌鐨勬墍鏈夌殑鐖惰妭鐐圭殑闆嗗悎)
聽
聽聽聽聽聽 涓婇潰鐨勪粙緇嶅浜庢垜浠竴鑸殑搴旂敤鍩烘湰涓婂鐢ㄤ簡錛屽鏋滀綘闇瑕佽繘涓姝ョ殑娣卞叆錛岃鏌ョ湅W3C鍙戝竷鐨勫叧浜嶺APH鐨勫畼鏂硅祫鏂欍?/font>
聽
JDOM+XPATH搴旂敤
聽
聽聽聽聽 聽鐜板湪鎴戜滑寮濮嬩嬌鐢╔PATH緇撳悎JDOM鏉ユ搷浣淴ML鏂囦歡浜嗐侸DOM鐨勫叧浜嶺PATH鐨刟pi鍙湁涓涓被錛歑path.java錛屽湪org.jdom.xpath榪欎釜鍖呬腑銆傝繖涓被涓殑鏍稿績鏂規(guī)硶涓昏鏄袱涓潤鎬佹柟娉?
selectNodes()鍜宻electSingleNode()銆傚墠鑰呮牴鎹竴涓獂path璇彞榪斿洖涓緇勮妭鐐?List錛涘悗鑰呮牴鎹竴涓獂path璇彞榪斿洖絎﹀悎鏉′歡鐨勭涓涓妭鐐?Object銆?br />聽聽聽聽聽聽聽聽 public static List selectNodes(Object arg1,String arg2) throws org.jdom.JDOMException;
聽聽聽聽聽聽聽聽 public static Object selectSingleNode(Object arg1,String arg2) throws org.jdom.JDOMException;
聽聽聽聽聽
聽聽聽聽聽 鍦ㄤ嬌鐢╔PATH涔嬪墠錛岃鍏堢‘瀹氫綘鐨刢lasspath璺緞閲岄潰鏈夊涓嬪嚑涓狫AR鍖咃紝濡傛灉娌℃湁錛岃浠嶫DOM鐨勫彂琛屽寘涓璴ib鐩綍涓媍opy:
聽聽聽聽聽聽聽聽 saxpaht.jar
聽聽聽聽聽聽聽聽 jaxen-core.jar
聽聽聽聽聽聽聽聽 jaxen-jdom.jar
鏍峰垪JAVA浠g爜錛?/font>
package
聽聽cyberobject.com.xpath;聽

聽聽聽聽聽
import
聽聽java.io.IOException;
聽聽聽聽聽
import
聽聽java.util.List;聽
聽聽聽聽聽
import
聽聽org.jdom.Document;
聽聽聽聽聽
import
聽聽org.jdom.Element;
聽聽聽聽聽
import
聽聽org.jdom.Text;
聽聽聽聽聽
import
聽聽org.jdom.JDOMException;
聽聽聽聽聽
import
聽聽org.jdom.input.SAXBuilder;
聽聽聽聽聽
import
聽聽org.jdom.xpath.XPath;聽

聽聽聽聽聽
/**聽*/
/**
聽
*/
聽
/**聽*/
/**
聽
聽聽聽聽聽*聽聽
@author
聽聽wanghua
聽聽聽聽聽*
聽聽聽聽聽*聽TODO聽To聽change聽the聽template聽for聽this聽generated聽type聽comment聽go聽to
聽聽聽聽聽*聽Window聽-聽Preferences聽-聽Java聽-聽Code聽Style聽-聽Code聽Templates
聽聽聽聽聽聽
*/
聽

聽聽聽聽聽聽
public
聽
class
聽XpathSample聽聽聽
{

聽聽聽聽聽聽聽聽聽聽
public
聽
static
聽
void
聽main(String[]聽args)聽
throws
聽JDOMException,聽IOException聽聽
{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽SAXBuilder聽sb聽
=
聽
new
聽聽SAXBuilder();
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽Document聽doc聽聽
=
聽sb.build(聽
"
聽friends.xml聽
"
聽);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽Element聽root聽聽
=
聽doc.getRootElement();
聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽List聽list聽
=
聽XPath.selectNodes(root,聽
"
聽/friends/friend聽
"
聽);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽System.out.println(聽
"
聽[info]聽Friends聽List:聽
"
聽);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
for
聽(聽
int
聽聽ii聽聽
=
聽聽聽
0
聽;聽ii聽聽
<
聽聽list.size();聽ii聽
++
聽)聽聽
{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽Element聽element聽聽
=
聽聽(Element)list.get(ii);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽String聽number聽聽
=
聽聽element.getAttributeValue(聽
"
聽number聽
"
聽);
聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
//
聽String聽name聽=聽element.getChildText("name");聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽String聽name聽聽
=
聽聽(聽(Text)聽XPath.selectSingleNode(element,聽
"
聽//friend[@number='聽
"
聽聽聽
+
聽聽number聽聽
+
聽聽聽
"
聽']/name/text()聽
"
聽)).getTextNormalize();聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
//
聽String聽sex聽=聽element.getChild("sex").getAttributeValue("value");聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽String聽sex聽聽
=
聽聽((Element)XPath.selectSingleNode(element,聽
"
聽//friend[@number='聽
"
聽聽聽
+
聽聽number聽聽
+
聽聽聽
"
聽']/sex聽
"
聽)).getAttributeValue(聽
"
聽value聽
"
聽);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
//
聽String聽phone聽=聽element.getChildText("phone");聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽String聽phone聽聽
=
聽聽(聽(Text)聽XPath.selectSingleNode(element,聽
"
聽//friend[@number='聽
"
聽聽聽
+
聽聽number聽聽
+
聽聽聽
"
聽']/phone/text()聽
"
聽)).getText();
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽System.out.println(聽
"
聽No.聽
"
聽
+
聽number);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽System.out.println(聽
"
聽聽Name:[聽
"
聽聽聽
+
聽聽name聽聽
+
聽聽聽
"
聽]聽
"
聽);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽System.out.println(聽
"
聽聽Sex:[聽
"
聽聽聽
+
聽聽sex聽聽
+
聽聽聽
"
聽]聽
"
聽);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽System.out.println(聽
"
聽聽Phone:[聽
"
聽聽聽
+
聽聽phone聽聽
+
聽聽聽
"
聽]聽
"
聽);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽System.out.println();
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽System.out.println(聽
"
聽[info]聽End聽of聽Friends聽List.聽
"
聽);
聽聽聽聽聽聽聽聽聽}
聽
聽聽聽聽}
聽聽
杈撳嚭緇撴灉錛?/font>
[info] Friends List:
No.1
聽Name:[zoof]
聽Sex:[male]
聽Phone:[87654321]
No.2
聽Name:[joe]
聽Sex:[male]
聽Phone:[87654322]
No.3
聽Name:[joe]
聽Sex:[female]
聽Phone:[87654323]
[info] End of Friends List.

]]>