标签: xpath

使用XPATH搜索包含 的文本

我使用XPather Browser在HTML页面上检查我的XPATH表达式.

我的最终目标是在Selenium中使用这些表达式来测试我的用户界面.

我有一个HTML文件,其内容与此类似:

<tr>
  <td>abc</td>
  <td>&nbsp;</td>
</tr>

我想选择一个包含字符串" &nbsp;" 的文本的节点.

使用像"abc"这样的普通字符串是没有问题的.我使用类似的XPATH //td[text()="abc"].

当我尝试使用XPATH时,//td[text()="&nbsp;"]它什么都不返回.是否有关于" &"的文本的特殊规则?

xml search selenium xpath

114
推荐指数
4
解决办法
20万
查看次数

为什么XPath中的索引从1开始而不是0?

我和一些同事正在比较我们编写的过去的语言,并且正在讨论我们使用VBScript的经验,其奇怪的功能,如基于1的索引而不是基于0的索引,就像几乎所有其他语言一样,原因是它是一个用户语言(例如Excel VBA)而不是开发人员的语言.

然后有人说," XPath也有基于1的索引 ",直到我发现这篇文章中有许多理由支持基于0的方法,其中包括Michael Kay本人的一些,我无法相信:

  • "...基于零的索引倾向于在访问具有一维数组访问表达式的多维数组时使索引公式更简单"
  • "在处理表格或订阅字符串时,基于零的寻址通常会更加方便"
  • "...硬件寻址不是基于0的寻址的唯一好处......它也使计算更容易......"

但随后Michael Kay被引用作为结论:

......基于1的逻辑是XPath和XSLT的正确选择...因为该语言是为用户而不是为程序员设计的,而且用户仍然有这种老式的习惯,即将书中的第一章称为章节一...

有人可以向我解释一下吗? (1)XPath如何为用户设计?我无法想象任何不是开发人员与XPath的语法刚性或XSLT的声明/功能编程方面争论的人.和(2)为什么确实的XPath的创造者违背现代编程语言的规范,通过选择基于1指数?

xslt indexing xpath

111
推荐指数
2
解决办法
3万
查看次数

如何在XDocument中使用XPath?

有一个类似的问题,但似乎解决方案在我的情况下没有用:XDocument,XPath和命名空间的怪异

这是我正在使用的XML:

<?xml version="1.0" encoding="utf-8"?>
<Report Id="ID1" Type="Demo Report" Created="2011-01-01T01:01:01+11:00" Culture="en" xmlns="http://demo.com/2011/demo-schema">
    <ReportInfo>
        <Name>Demo Report</Name>
        <CreatedBy>Unit Test</CreatedBy>
    </ReportInfo>
</Report>
Run Code Online (Sandbox Code Playgroud)

以下是我认为它应该工作的代码,但它没有......

XDocument xdoc = XDocument.Load(@"C:\SampleXML.xml");
XmlNamespaceManager xnm = new XmlNamespaceManager(new NameTable()); 
xnm.AddNamespace(String.Empty, "http://demo.com/2011/demo-schema");
Console.WriteLine(xdoc.XPathSelectElement("/Report/ReportInfo/Name", xnm) == null);
Run Code Online (Sandbox Code Playgroud)

有没有人有任何想法?谢谢.

.net c# xml xpath linq-to-xml

108
推荐指数
3
解决办法
10万
查看次数

XPath:获取子节点包含属性的节点

假设我有以下XML:

<book category="CLASSICS">
  <title lang="it">Purgatorio</title>
  <author>Dante Alighieri</author>
  <year>1308</year>
  <price>30.00</price>
</book>

<book category="CLASSICS">
  <title lang="it">Inferno</title>
  <author>Dante Alighieri</author>
  <year>1308</year>
  <price>30.00</price>
</book>

<book category="CHILDREN">
  <title lang="en">Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>

<book category="WEB">
  <title lang="en">XQuery Kick Start</title>
  <author>James McGovern</author>
  <author>Per Bothner</author>
  <author>Kurt Cagle</author>
  <author>James Linn</author>
  <author>Vaidyanathan Nagarajan</author>
  <year>2003</year>
  <price>49.99</price>
</book>

<book category="WEB">
  <title lang="en">Learning XML</title>
  <author>Erik T. Ray</author>
  <year>2003</year>
  <price>39.95</price>
</book>
Run Code Online (Sandbox Code Playgroud)

我想做一个xpath,它可以获取所有具有标题节点且语言属性为"it"的书节点.

我的尝试看起来像这样:

//book[title[@lang='it']]

但那没用.我希望得到回节点:

<book category="CLASSICS">
  <title lang="it">Purgatorio</title>
  <author>Dante Alighieri</author>
  <year>1308</year>
  <price>30.00</price>
</book>

<book category="CLASSICS">
  <title lang="it">Inferno</title>
  <author>Dante Alighieri</author>
  <year>1308</year> …
Run Code Online (Sandbox Code Playgroud)

xml xpath

106
推荐指数
3
解决办法
13万
查看次数

从SQL Server 2008中的XML字段中选择值

只看我的XML字段,我的行看起来像这样:

<person><firstName>Jon</firstName><lastName>Johnson</lastName></person>
<person><firstName>Kathy</firstName><lastName>Carter</lastName></person>
<person><firstName>Bob</firstName><lastName>Burns</lastName></person>
Run Code Online (Sandbox Code Playgroud)

请注意,这些是我表中的三行.

我想将SQL结果作为表返回

Jon  | Johnson
Kathy| Carter
Bob  | Burns
Run Code Online (Sandbox Code Playgroud)

什么查询将完成此任务?

xml sql-server xpath

103
推荐指数
5
解决办法
40万
查看次数

在Selenium中选择已知元素的父元素

我有一个可以用Selenium 1 选择的元素.

不幸的是,我需要单击父元素以获得所需的行为.我可以轻松找到的元素具有不可选择的属性,使其无法点击.如何使用XPath向上导航?

selenium select xpath parent

101
推荐指数
5
解决办法
14万
查看次数

是否有XSLT名称元素?

在XSLT中有

<xsl:value-of select="expression"/>
Run Code Online (Sandbox Code Playgroud)

获取元素的值,但是有什么东西可以选择元素的标记名吗?

在这种情况下:

<person>
  <!-- required stuff -->
  <name>Robert</name>
  <!-- optional stuff, free form for future extension. 
       Using XMLSchema's xsd:any -->
  <profession>programmer</profession>
  <hobby>photography</hobby>
</person>

<xsl:for-each select="person">
   <xsl:tag-of select="."/> : <xsl:value-of select="."/>
</xsl:for-each>
Run Code Online (Sandbox Code Playgroud)

要获得这样的输出:

name : Robert
profession : programmer
hobby : photography
Run Code Online (Sandbox Code Playgroud)

当然上面的XSLT不会编译因为

 <xsl:tag-of select="expression"/>
Run Code Online (Sandbox Code Playgroud)

不存在.但是怎么办呢?

xml xslt xpath

98
推荐指数
5
解决办法
14万
查看次数

XPath:如何检查属性是否存在?

给定以下XML,如何编写XPath查询以拉出属性所在的节点foo?:

<node1>
  <node2>
    <node3 foo='bar'></node3>
    <node3></node3>
    <node3 bar='foo'></node3>
    <node3 foo='foobar'></node3>
  </node2>
</node1>
Run Code Online (Sandbox Code Playgroud)

xml xpath

98
推荐指数
3
解决办法
8万
查看次数

如何使用XPath忽略名称空间

我的目标是使用XPath从具有多个名称空间的多个xml文件中提取某些节点.只要我知道名称空间URI,一切正常.命名空间名称本身保持不变,但模式(XSD)有时是客户端生成的,即我不知道.然后我基本上有三种选择:

  1. 只使用一个模式用于命名空间,希望没有出错(我能确定吗?)

  2. 获取文档的子节点并查找带有命名空间URI的第一个节点,希望它在那里并只使用URI,希望它是正确的.可能由于多种原因而出错

  3. 不知何故告诉xpath:"看,我不关心命名空间,只需找到具有此名称的所有节点,我甚至可以告诉您命名空间的名称,而不是URI".这就是问题......

这不是许多"我的xpath表达不起作用的重复,因为我不知道命名空间感知" 这里这里发现的问题.我知道如何使用命名空间感知.只是没有如何摆脱它.

xml xpath namespaces xml-namespaces

96
推荐指数
3
解决办法
8万
查看次数

XPath - 选择等于值的元素

在Xpath中,我想要选择等于特定值的元素.

示例XML数据:

<aaa id="11" >
    <aaa id="21" >
        <aaa id="31" ></aaa>
        <bbb id="32" >
            <aaa id="41" ></aaa>
            <bbb id="42" ></bbb>
            <ccc id="43" ></ccc>
            <ddd id="44" >qwerty</ddd>
            <ddd id="45" ></ddd>
            <ddd id="46" ></ddd>
        </bbb>
    </aaa>
    <bbb id="22" >
         <aaa id="33" >qwerty</aaa>
         <bbb id="34" ></bbb>
         <ccc id="35" ></ccc>
         <ddd id="36" ></ddd>
         <ddd id="37" ></ddd>
         <ddd id="38" ></ddd>
    </bbb>
    <ccc id="23" >qwerty</ccc>
    <ccc id="24" ></ccc>
 </aaa>
Run Code Online (Sandbox Code Playgroud)

现在,使用XPath:

//ccc[.='qwerty']
Run Code Online (Sandbox Code Playgroud)

我得到了正确的预期结果:

Name    Value
ccc     qwerty
Run Code Online (Sandbox Code Playgroud)

现在,使用XPath:

//aaa[.='qwerty']
Run Code Online (Sandbox Code Playgroud)

我得到了意外的结果:

Name    Value
aaa …
Run Code Online (Sandbox Code Playgroud)

xpath

95
推荐指数
2
解决办法
17万
查看次数