在SonarQube中使用XPath我遇到了一个问题,我无法找到一个查询来验证元素是否在另一个元素之前。
例如,在下一个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
获取这种XML格式答案 0 :(得分:1)
选择所有<BIN_PACKAGE>
没有前<BIN_SCHEMA>
个元素的XPath
相对于/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
。根据需要更换它。