如何搜索。在SonarQube的XPath中

时间:2014-08-14 07:45:18

标签: xpath sonarqube

我的要求是使用System.Resources搜索""在SonarQube。我可以使用以下XPath来搜索关键字" Resources"。

//*[@tokenValue='Resources']

但如果我改用这种模式,它就不起作用了。我认为原因是点,但我不知道如何在XPath中搜索它。它有逃脱的特征吗?我使用" \",但不能正常工作。

//*[@tokenValue='System.Resources']

更新:我认为原因是' System.Resources'在XML中分为2个级别。但仍然不知道如何通过XPath搜索模式。

  <NAMESPACE_NAME tokenValue="System" tokenLine="3" tokenColumn="6">
    <NAMESPACE_OR_TYPE_NAME tokenValue="System" tokenLine="3" tokenColumn="6">
      <IDENTIFIER tokenValue="System" tokenLine="3" tokenColumn="6"/>
      <DOT tokenValue="." tokenLine="3" tokenColumn="12"/>
      <IDENTIFIER tokenValue="Resources" tokenLine="3" tokenColumn="13"/>
    </NAMESPACE_OR_TYPE_NAME>
  </NAMESPACE_NAME>

1 个答案:

答案 0 :(得分:1)

字符串System.Resources分布在输入XML中的三个不同元素中。这就是为什么像

这样的表达式
//*[@tokenValue='Resources']

永远找不到它,因为没有单个IDENTIFIER元素同时具有“System”和“Resources”作为属性值。所以,你必须寻找其他东西。为什么不是NAMESPACE_OR_TYPE_NAME元素?例如:

//NAMESPACE_OR_TYPE_NAME[IDENTIFIER/@tokenValue = 'System' and IDENTIFIER/@tokenValue = 'Resources']

我不确定“系统”和“资源”之间的点.是否有任何意义,但这个表达式只是忽略它。


为了说明这一切,下面有一个XSLT样式表。

XML输入

<?xml version="1.0" encoding="UTF-8"?>
<NAMESPACE_NAME tokenValue="System" tokenLine="3" tokenColumn="6">
    <NAMESPACE_OR_TYPE_NAME tokenValue="System" tokenLine="3" tokenColumn="6">
      <IDENTIFIER tokenValue="System" tokenLine="3" tokenColumn="6"/>
      <DOT tokenValue="." tokenLine="3" tokenColumn="12"/>
      <IDENTIFIER tokenValue="Resources" tokenLine="3" tokenColumn="13"/>
    </NAMESPACE_OR_TYPE_NAME>
  </NAMESPACE_NAME>

<强>样式表

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:strip-space elements="*"/>
    <xsl:output method="xml" omit-xml-declaration="yes" version="1.0" encoding="UTF-8"/>

    <xsl:template match="NAMESPACE_OR_TYPE_NAME[IDENTIFIER/@tokenValue = 'System' and IDENTIFIER/@tokenValue = 'Resources']">
        <bingo/>
    </xsl:template>

</xsl:transform>

<强>输出

<bingo/>