如何在XPath中处理方括号

时间:2018-03-22 07:49:58

标签: java xpath

我的应用程序必须计算用户点击的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&amp;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中?

1 个答案:

答案 0 :(得分:1)

引起麻烦的方括号不是引号。

您已经标记了Java问题,这意味着您应该能够使用XPath 2.0(例如通过Saxon或Jaxen),这意味着您可以通过加倍来转义字符串文字中的引号:

@data-ga='[''Sign Up'',''Sign Up Navigation'',''Header'',null,null]'

不幸的是,在使用XPath 1.0的一般情况下,这很难实现。