① Selenium中關於XPath中節點後面[1]的詭異問題
//a[contains(@id,'abc')][2]
這個2代表你要找到 A 在家中排行老二. 而不是所專有家庭合起來的第二個.
比如說屬
<span><a>老大</a><a>老二</a></span>
<span><a>老大</a><a>老二</a></span>
用 //span/a[2]
會把兩個老二都找出來.
如果是這樣的
<span><a>老大</a></span>
<span><a>老大</a></span>
<span><a>老大</a></span>
<span><a>老大</a></span>
<span><a>老大</a></span>
用這個xpath 就會找不到東西, 因為都是獨生子女.
你要選中第二個老大, xpath 要這樣寫
(//span/a)[2]
這個方式在很多地方有效, 但在Selenium 中好像無效.
② 如何在node中使用xpath-quntin-ITPUB博客
在實用數據綁定 系列文章中討論 XPath,原因就在於這些選擇都使用邏輯名(請參閱 突出的邏輯性)。比方說,不必選擇根元素第二個子元素的第一個屬性,可以使用 XPath 表達式 /cds/cd[@title=′August and Everything After′]。從一定意義上說,這就是 數據綁定,因為可以使用 XML 標記而不是結構來訪問數據。
本文主要討論使用 XPath 作為通過邏輯名從 XML 中訪問數據的方法,如 cd、table 或 person,而不用 firstElement 或 parent.getChildren(2)。最終得到的代碼非常類似於數據綁定,使用邏輯名而非語義名,但是又沒有傳統數據綁定解決方案的初始類生成和類路徑問題。
節點知識
第 1 部分 中提到,XPath 選擇總是返回一個節點 集。和其他任何集合一樣,其中可能有零個、一個或多個成員。這里重要的概念是節點。節點可以是一段文本(比如元素的內容)、一個元素、一條處理指令或者注釋。當然,節點集就是這類事物的任意組合。
如果您是一位 DOM 程序員,就不會被節點這個概念難倒。DOM 根據其 Node 介面看待一切事物,因此您也就習慣於通過 Node 介面來處理注釋、元素和文本數據。如果不習慣 DOM,應該花點兒時間來熟悉節點。節點對於使用 XPath 至關重要。執行 XPath 表達式時,對表達式結果進行操作的代碼必須對節點操作,而不深究 XML 語義。文檔內的導航是用 XPath 表達式進行的,而不是使用 DOM 樹轉移方法從一個子節點移動到另一個。
回頁首
JAXP 和 XPath 基礎
Java 編程語言的最新版本 Java 5.0 中,對 Java API for XML Processing(JAXP)和 XPath 的支持已成為標准。您可能已經熟悉 JAXP 以及 SAX、DOM 和 XSL 編程中使用的 javax.xml.parsers 和 javax.xml.transform 包。(如果不熟悉的話,請參閱本文後面列出的一些 參考資料。)對 XPath 的支持主要來自於一個新的包 javax.xml.xpath。
檢查 JAXP 和 Java 版本
JAXP 1.3 包含在所有的 Java 5.0 下載包中。為了確保安裝了 JAXP 1.3,請在命令提示符下輸入以下命令:
java -version
應該看到類似於 清單 1 所示的結果。
清單 1. 命令行提示符下的 Java 5.0
java version "1.5.0_02"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_02-56)
Java HotSpot(TM) Client VM (build 1.5.0_02-36, mixed mode, sharing)
如果版本是 1.5 或更高,則已經有了 JAXP 1.3,可以確信您有了本文中使用的 XPath API。
簡單的 XML
還需要一些供操作的 XML。本文中所有的例子都將使用 清單 2 中所示的簡單 XML 文檔。這個文檔並不復雜,但是足以說明 90% 的 XPath 編程中所需要的各種 XPath 函數。
③ 如何用xpath定位符合多個屬性條件的節點集
Books/book[@author='John' and @year='2009' and @language='En']
④ xpath怎麼樣對元素名過濾,尤其是邏輯為非的情況
|直元素種類不多,用|直接選取節點集:
<xsl:for-eachselect="cc|ee">
</xsl:for-each>
否則專試試判斷表達式屬:
<xsl:for-eachselect="child::*">
<xsl:iftest="not(bb)">
</xsl:if>
</xsl:for-each>
⑤ 怎麼用xpath提取以下xml的節點
獲取到節點對象後,應該有方法獲取屬性的,
你用contextNode變數,應該有getAttribute方法,內
輸入屬性名即可另外有容篇文章你可以看看
http://www.ibm.com/developerworks/cn/xml/x-javaxpathapi.html
⑥ ie中js操作xpath,selectNodes提示未識別
IE的版本是多少
用Ajax請求返回的xml , 一般瀏覽器都能用
responseXML.documentElement.selectNodes("XXX")
去檢索需要的節點,但是IE升級到10之後,突然報錯 :
該對象不支持selectNodes()屬性或者方法!
郁悶了挺長時間,試了很多方法都不行。我發現技術菜的時候,網上搜索信息的能力也很差,網上找了好久方法,終於在高手的幫助下解決了。
發送Ajax請求之前,加一句:
xmlHttp.open(....);
try{
xmlHttp.responseType("msxml-document");
}catch(e){
}
xmlHttp.send(null);
問題解決,可以正常使用 selectNodes()方法了,selectSingleNode()方法應該也可以使用了!
原來selectNodes()方法是依賴於 msxml 的,在IE8,9的時候,瀏覽器處理了返回的XML格式的doucment , 使之變為 msxml-document ,正常使用 selectNode() 方法沒有問題。但是IE10去掉了這一處理,返回原生的 XML , 所以需要我們自己手動設置成 msxml 。
⑦ c# 中xpath語法 如何獲得元素Node下的所有子元素和孫元素叫item的。 其他地方也有叫item的元素 ,但不能取
XmlElement theNode = null;
XmlElement root = null;
XmlDocument document = new XmlDocument();
document.Load(@源"你的xml位置.xml");
root = document.DocumentElement;
theNode=(XmlElement)root.SelectSingleNode("位置/Node);
string name= theNode.GetElementsByTagName("item").Item(0).InnerText;
⑧ 如何用xpath定位到batNo
這種xml只是帶了命名空間,解析出來就行。
解決辦法如下,中文部分你自己替換下你的xml對應回的字答符串:
InputStream is=loader.getResourceAsStream("你的xml地址");
Document doc= Dom4jUtil.loadXml(is);
HashMap nsMap=new HashMap();
nsMap.put("soap","第一個網址貼在這里");
nsMap.put("ns2","第二個網址貼在這里");
XPath xpath=doc.createXPath("/soap:Envelope/soap:Body/ns2:processResponse/response");
xpath.setNamespaceURIs(nsMap);
Node node= xpath.selectSingleNode(doc);
然後就可以正常取值了。
⑨ 求一個Xpath語句,選取特定值的節點
String type = "EEE"
File file = new File(strxml);
SAXReader reader = new SAXReader();
Document doc = reader.read(file);
List<Node> node = doc.selectNodes("//root[數據名='" + type + "']");
system.out.println(node.get(0).getText());
⑩ xpath 路徑表達式。node()和*的區別
你好!
*
匹配任何元素節點。
@*
匹配任何屬性節點。
node()
匹配任何類型的節點
例子:
/bookstore/*
選取內
bookstore
元素的所有子元素。
//*
選取文容檔中的所有元素。
//title[@*]
選取所有帶有屬性的
title
元素。
希望對你有所幫助,望採納。