我的要求是使用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>
答案 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/>