XPath查询以在另一个之前验证元素

时间:2017-03-13 14:49:20

标签: xml xpath

在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格式

1 个答案:

答案 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。根据需要更换它。