① 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
元素。
希望对你有所帮助,望采纳。