使用xpath in in sonarqube,我陷入了一个问题,我无法找到查询以验证元素是否在另一个元素之前的问题。
例如,在下一个XML中,我要检查元素<BIN_PACKAGE>
是否具有前面的<BIN_SCHEMA>
元素。
如果有的话,它应该忽略该语句,如果没有,则应让<BIN_SCHEMA>
选择element/elements
节点。
<COMPILATION_UNIT tokenValue="CREATE" tokenLine="1" tokenColumn="0">
<PL_SQL_COMPILATION_UNIT_NO_EOF tokenValue="CREATE" tokenLine="1" tokenColumn="0">
<CREATE_PACKAGE tokenValue="CREATE" tokenLine="1" tokenColumn="0">
<CREATE tokenValue="CREATE" tokenLine="1" tokenColumn="0"/>
<OR tokenValue="OR" tokenLine="1" tokenColumn="7"/>
<IDENTIFIER tokenValue="REPLACE" tokenLine="1" tokenColumn="10"/>
<IDENTIFIER tokenValue="PACKAGE" tokenLine="1" tokenColumn="18"/>
<BIN_SCHEMA tokenValue="NEXUS_GIS" tokenLine="1" tokenColumn="26">
<BIN_IDENTIFIER tokenValue="NEXUS_GIS" tokenLine="1" tokenColumn="26">
<IDENTIFIER tokenValue="NEXUS_GIS" tokenLine="1" tokenColumn="26"/>
</BIN_IDENTIFIER>
</BIN_SCHEMA>
<DOT tokenValue="." tokenLine="1" tokenColumn="35"/>
<BIN_PACKAGE tokenValue="PKG_EM_GI" tokenLine="1" tokenColumn="36">
<BIN_IDENTIFIER tokenValue="PKG_EM_GI" tokenLine="1" tokenColumn="36">
<IDENTIFIER tokenValue="PKG_EM_GI" tokenLine="1" tokenColumn="36"/>
</BIN_IDENTIFIER>
</BIN_PACKAGE>
...............
</CREATE_PACKAGE>
</PL_SQL_COMPILATION_UNIT_NO_EOF>
</COMPILATION_UNIT>
我从SSLR PL/SQL TOOLKIT
xpath选择所有没有前面<BIN_SCHEMA>
元素的<BIN_PACKAGE>
相对于/COMPILATION_UNIT/PL_SQL_COMPILATION_UNIT_NO_EOF/CREATE_PACKAGE
轴是:
BIN_PACKAGE[count(preceding-sibling::BIN_SCHEMA) = 0]/BIN_IDENTIFIER/IDENTIFIER
在此表达式中,/BIN_IDENTIFIER/IDENTIFIER
表示您所需的目标表达式element/elements
。按照您的喜好更换它。