我正在尝试使用Capybara单击一个按钮.我尝试了所有我能想到的组合,但没有运气.试图点击"删除"链接.只有当您将鼠标悬停在表格中的行上时,才会显示删除链接.
这是HTML:
<tbody>
<tr class="even" id="informal_6">
<td class="columnOrganizationNameColumnValue" id="informal_7">
<div>
<a id="showLink_0" title="Organization Details" class="viewLink">
Institution / Automation
</a>
</div>
<div class="gridMenuDescription">
</div>
<div class="gridMenu">
<a id="gridMenuDirectLink_1" title="Edit Organization" class="gridMenuItem">
edit
</a>
<a id="gridMenuDirectLink_2" class="gridMenuItem delete">
delete
</a>
</div>
</td>
</tbody>
Run Code Online (Sandbox Code Playgroud)
我想注意一下,"gridMenu"div,当你使用Firebug将鼠标悬停在它上面时,它转向:
<div class="gridMenu hover gridMenuShow">
Run Code Online (Sandbox Code Playgroud)
我试过的一些事情,但没有运气:
find(:xpath, '//*[(@id = "gridMenuDirectLink_2")]').click
find("#informal_6").find("#informal_7").find(".gridMenu.hover.gridMenuShow").find(".gridMenuItem.delete").click
Run Code Online (Sandbox Code Playgroud)
建议?
我遇到了nokogiri和xpath的奇怪问题.我想解析一个HTML文档,并通过href值和它们包含的锚文本获取所有链接.
到目前为止这是我的xpath:
xpath = "//a[contains(text(), #{link['anchor_text']}) and @href='#{link['target_url']}']"
a = doc.search(xpath)
Run Code Online (Sandbox Code Playgroud)
只要link ['anchor_text']是没有数字的字符串,这就可以正常工作.
如果我试图获取锚文本"11example"的链接,则会抛出以下错误:
Invalid expression: //a[contains(text(), 11example) and @href='http://www.example.com/']
Run Code Online (Sandbox Code Playgroud)
也许这只是一个愚蠢的错误,但我不明白为什么会出现这种错误.如果我在xpath中围绕#{link ['anchor_text']}添加一些引号,那么什么都不起作用.
编辑:这是示例HTML:
<!DOCTYPE html>
<head>
<title>Example.com</title>
</head>
<body>
<p>
<strong>Here is some text</strong><br />
<a href="example.com" target="_blank">11example</a>Some text here and there
</p>
<p>
<strong>Another text</strong><br />
<a href="example.com/test" target="_blank">example.com</a>Some text here and there
</p>
</body>
Run Code Online (Sandbox Code Playgroud)
Edit2:如果我在irb控制台中手动运行这些查询,一切都按预期工作,但前提是我将文本放在引号中.
提前致谢!
亲切的问候,madhippie
我使用Sitecore开发人员中心Sitecore XPath Builder来创建查询.
以下查询在源字段中正常工作:
fast:/sitecore/content/#Product Information#/#Image Galleries#//*
此查询返回图像库下面的所有对象,但这不是我想要的.我想只包含一个名为"图库"的特定模板.我写了这个查询.
fast:/sitecore/content/#Product Information#/#Image Galleries#//*[@@templatename='Image Gallery']
此查询正确返回XPath Builder/Sitecore查询表示法中的信息,但当放在另一个项目的源字段中时,它会失败并返回此错误.
预计在第5位的字符串结束.
谢谢阅读!:)
这是我目前的代码:
Document document2 = builder.parse(new FileInputStream("C:path to xml file.xml"));
Node theNode2 = (Node) xpath.evaluate("//*[@name='**variable here**']", document2, XPathConstants.NODE);
Run Code Online (Sandbox Code Playgroud)
如果代码在这里说"变量",是否可以使用变量搜索XML文件?到目前为止,我只能在我正在搜索的内容中进行硬编码,即:
("//*[@name='happy']", document2, XPathConstants.NODE);
Run Code Online (Sandbox Code Playgroud) 我一直在阅读XPath规范并使用XPath Visualizer工具以获得更深入的XPath 1.0知识.
我可以使用选择文档的根节点/.当我在工具中输入此字符时,在其文本编辑器中没有指示可视选择,但状态栏包含以下文本:
"/: 1 node selected",
这是预期的.选择的是不可见的根节点(文档根).
但是当我将/*/parent::*字符序列输入到工具中时,我得到了
"/*/parent::*: Zero nodes selected".
该工具是否正确或该表达式是否还应选择根节点?
我也尝试使用祖先轴而不是父节点,规格说明如下:
祖先轴包含上下文节点的祖先; 上下文节点的祖先由上下文节点的父节点和父节点的父节点组成,依此类推; 因此,除非上下文节点是根节点,否则祖先轴将始终包括根节点
其中特别提到了根节点.因为在我的情况下,第一个位置步骤的上下文节点是文档元素,结果集是否应该包含根节点?为什么不?
规格也说这个:
父轴包含上下文节点的父节点(如果有)
还有这个:
/选择文档根(始终是文档元素的父级)
请注意,我故意在上面的文本中使用与规范中使用的相同的术语.
Edit01
加载到工具中的xml文档是一个格式良好的XML文档,因此非空.
我的问题不是关于xpath语法,而是与围绕xpath的java API有关.考虑以下xml:
<wrapper>
<metadata>
<somefield>somevalue</somefield>
<anotherfield>othervalue</anotherfield>
</metadata>
<data>
<some>
<unique>
<xml>
<structure>stuff</structure>
</xml>
</unique>
</some>
</data>
</wrapper>
Run Code Online (Sandbox Code Playgroud)
我可以使用以下代码轻松地使用xpath获取元数据字段:
XPath xp = XPathFactory.newInstance().newXPath();
Node node = (Node) xp.evaluate("/wrapper/metadata/somefield", xmlDoc, XPathConstants.NODE);
String somefield = node.getFirstChild().getNodeValue();
Run Code Online (Sandbox Code Playgroud)
我正在努力学习如何从标记开始获取表示xml 子树的字符串<some>.换句话说,我编写什么代码来获取一个字符串,打印出来时会打印出以下内容?xpath查询将是"/ wrapper/data/some",但我不知道如何正确使用xpath api.
<some>
<unique>
<xml>
<structure>stuff</structure>
</xml>
</unique>
</some>
Run Code Online (Sandbox Code Playgroud) 我正在学习xslt和xpath.从节点中选择一个属性我得到了这个错误 预期的标记'eof'找到'@'.
这是我的XML和XSL文件:
XML:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="catalog.xsl"?>
<inventory>
<drink>
<lemonade supplier="mother" id="1">
<price>$2.50</price>
<amount>20</amount>
</lemonade>
<pop supplier="store" id="2">
<price>$1.50</price>
<amount>10</amount>
</pop>
</drink>
<snack>
<chips supplier="store" id="3">
<price>$4.50</price>
<amount>60</amount>
<calories>180</calories>
</chips>
</snack>
</inventory>
Run Code Online (Sandbox Code Playgroud)
XSL文件:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/" >
<html>
<body>
<xsl:value-of select="inventory/snack/chips@supplier"/>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud) 我已经阅读了关于Stackoverflow的另一篇文章,讨论了这个主题,但它几乎都是基于Windows的工具.我目前正在运行Mac,并且在所有提到的工具中,http://xpath.alephzarro.com和http://ditchnet.org/aquapath/在Mac中都可用.
有没有人知道SublimeText2/3是否有一个我不知道找到某个节点的XPath的功能?我问的是Sublime,因为我用它作为我的主要工具.
我想在亚马逊的客户评论中得到1到5的房价.我查看了源代码,发现这部分看起来像
<div style="margin-bottom:0.5em;">
<span style="margin-right:5px;"><span class="swSprite s_star_5_0 " title="5.0 out of 5 stars" ><span>5.0 out of 5 stars</span></span> </span>
<span style="vertical-align:middle;"><b>Works great right out of the box with Surface Pro</b>, <nobr>October 5, 2013</nobr></span>
</div>
Run Code Online (Sandbox Code Playgroud)
我希望从5星中获得5.0分
<span>5.0 out of 5 stars</span></span> </span>
Run Code Online (Sandbox Code Playgroud)
我怎样才能使用xpathSApply来获取它?
谢谢!
我有一个样式表,它包含两个文件,一个来自工程库,另一个来自文档库,然后将它们合并以创建一些DITA文件(进一步处理)。最近,我试图将文档文件的内容分为通用文件和特定文件。因此,我的合并现在是一个包含两个文档文件的工程文件。
通用文件是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<messages xmlns:xs="http://www.w3.org/2001/XMLSchema">
<message id="IDENT_STRING">
....
</message>
</messages>
Run Code Online (Sandbox Code Playgroud)
特定文件具有指向通用文件的ENTITY标签:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE messages [
<!ENTITY generic-file SYSTEM "generic-file.xml">
]>
<messages> &generic-file; <!-- specific-file -->
<message id="IDENT_STRING2">
....
</message>
</messages>
Run Code Online (Sandbox Code Playgroud)
选择是这样写的:
<xsl:copy-of select="$docid/message[@id=$id]/doc/explanation/text()"/>
Run Code Online (Sandbox Code Playgroud)
这只会从特定文件中获取内容。直到我将select更改为两个斜杠后,我的样式表才能正常工作。这是正确的版本:
<xsl:copy-of select="$docid//message[@id=$id]/doc/explanation/text()"/>
Run Code Online (Sandbox Code Playgroud)
我对社区的问题是1)为什么第二种语法正确?和2)我将如何更快地找到它?