我的应用程序必须计算用户点击的HTML元素的XPath。在这种情况下,我试图点击"注册"来自Stackoverflow.com的按钮
以下是点击的HTML元素的DOM:
<html itemscope="" itemtype="http://schema.org/QAPage">
<body class="question-page new-topbar no-grid-comments no-grid-post-layout">
<header class="top-bar js-top-bar _fixed">
<div class="-container">
<div class="-actions">
<div class="-ctas">
<a href="https://stackoverflow.com/users/signup?ssrc=head&returnurl=%2fusers%2fstory%2fcurrent" class="login-link btn-topbar-primary" rel="nofollow" data-ga="["Sign Up","Sign Up Navigation","Header",null,null]">Sign Up</a>
如您所见,此dom中的最后一个元素是<a>
标记,其中包含以下属性:
data-ga="["Sign Up","Sign Up Navigation","Header",null,null]
我的应用程序为HTML-Element计算了这个XPath:
/HTML/BODY[@class='questions-page new-topbar']/HEADER[@class='top-bar js-top-bar _fixed']/DIV[@class='-container']/DIV[@class='-actions']/DIV[@class='-ctas']/A[@href='https://stackoverflow.com/users/signup?ssrc=head&returnurl=%2fusers%2fstory%2fcurrent' and @class='login-link btn-topbar-primary' and @rel='nofollow' and @data-ga='['Sign Up','Sign Up Navigation','Header',null,null]']
当我测试XPath时出现错误,没有找到任何元素。我追踪错误并发现,如果我从XPath中删除and @data-ga='['Sign Up','Sign Up Navigation','Header',null,null]'
,一切正常,但我不能简单地删除属性,所以我的问题是:如何正确地逃避嵌套的方括号在我的XPath中?
答案 0 :(得分:1)
引起麻烦的方括号不是引号。
您已经标记了Java问题,这意味着您应该能够使用XPath 2.0(例如通过Saxon或Jaxen),这意味着您可以通过加倍来转义字符串文字中的引号:
@data-ga='[''Sign Up'',''Sign Up Navigation'',''Header'',null,null]'
不幸的是,在使用XPath 1.0的一般情况下,这很难实现。