我试图从xml创建一个xpath查询,当@ token = V73或@token = V72或@token = V71或@token = V70
时发生违规xml:
<compilationUnit tokenValue="package" tokenLine="1" tokenColumn="0">
<packageDeclaration tokenValue="package" tokenLine="1" tokenColumn="0">
<PACKAGE tokenValue="package" tokenLine="1" tokenColumn="0">
<TOKEN tokenValue="package" tokenLine="1" tokenColumn="0"/>
</PACKAGE>
<qualifiedIdentifier tokenValue="revueCode" tokenLine="1" tokenColumn="8">
<IDENTIFIER tokenValue="revueCode" tokenLine="1" tokenColumn="8">
<TOKEN tokenValue="revueCode" tokenLine="1" tokenColumn="8"/>
</IDENTIFIER>
</qualifiedIdentifier>
<SEMI tokenValue=";" tokenLine="1" tokenColumn="17">
<TOKEN tokenValue=";" tokenLine="1" tokenColumn="17"/>
</SEMI>
</packageDeclaration>
<importDeclaration tokenValue="import" tokenLine="3" tokenColumn="0">
<IMPORT tokenValue="import" tokenLine="3" tokenColumn="0">
<TOKEN tokenValue="import" tokenLine="3" tokenColumn="0"/>
</IMPORT>
<qualifiedIdentifier tokenValue="com" tokenLine="3" tokenColumn="7">
<IDENTIFIER tokenValue="com" tokenLine="3" tokenColumn="7">
<TOKEN tokenValue="com" tokenLine="3" tokenColumn="7"/>
</IDENTIFIER>
<DOT tokenValue="." tokenLine="3" tokenColumn="10">
<TOKEN tokenValue="." tokenLine="3" tokenColumn="10"/>
</DOT>
<IDENTIFIER tokenValue="orca" tokenLine="3" tokenColumn="11">
<TOKEN tokenValue="orca" tokenLine="3" tokenColumn="11"/>
</IDENTIFIER>
<DOT tokenValue="." tokenLine="3" tokenColumn="15">
<TOKEN tokenValue="." tokenLine="3" tokenColumn="15"/>
</DOT>
<IDENTIFIER tokenValue="rightv" tokenLine="3" tokenColumn="16">
<TOKEN tokenValue="rightv" tokenLine="3" tokenColumn="16"/>
</IDENTIFIER>
<DOT tokenValue="." tokenLine="3" tokenColumn="22">
<TOKEN tokenValue="." tokenLine="3" tokenColumn="22"/>
</DOT>
<IDENTIFIER tokenValue="interfaces" tokenLine="3" tokenColumn="23">
<TOKEN tokenValue="interfaces" tokenLine="3" tokenColumn="23"/>
</IDENTIFIER>
<DOT tokenValue="." tokenLine="3" tokenColumn="33">
<TOKEN tokenValue="." tokenLine="3" tokenColumn="33"/>
</DOT>
<IDENTIFIER tokenValue="v73" tokenLine="3" tokenColumn="34">
<TOKEN tokenValue="v73" tokenLine="3" tokenColumn="34"/>
</IDENTIFIER>
<DOT tokenValue="." tokenLine="3" tokenColumn="37">
<TOKEN tokenValue="." tokenLine="3" tokenColumn="37"/>
</DOT>
<IDENTIFIER tokenValue="catalog" tokenLine="3" tokenColumn="38">
<TOKEN tokenValue="catalog" tokenLine="3" tokenColumn="38"/>
</IDENTIFIER>
<DOT tokenValue="." tokenLine="3" tokenColumn="45">
<TOKEN tokenValue="." tokenLine="3" tokenColumn="45"/>
</DOT>
<IDENTIFIER tokenValue="core" tokenLine="3" tokenColumn="46">
<TOKEN tokenValue="core" tokenLine="3" tokenColumn="46"/>
</IDENTIFIER>
<DOT tokenValue="." tokenLine="3" tokenColumn="50">
<TOKEN tokenValue="." tokenLine="3" tokenColumn="50"/>
</DOT>
<IDENTIFIER tokenValue="entities" tokenLine="3" tokenColumn="51">
<TOKEN tokenValue="entities" tokenLine="3" tokenColumn="51"/>
</IDENTIFIER>
<DOT tokenValue="." tokenLine="3" tokenColumn="59">
<TOKEN tokenValue="." tokenLine="3" tokenColumn="59"/>
</DOT>
<IDENTIFIER tokenValue="xsd" tokenLine="3" tokenColumn="60">
<TOKEN tokenValue="xsd" tokenLine="3" tokenColumn="60"/>
</IDENTIFIER>
<DOT tokenValue="." tokenLine="3" tokenColumn="63">
<TOKEN tokenValue="." tokenLine="3" tokenColumn="63"/>
</DOT>
<IDENTIFIER tokenValue="IPageIdentifier" tokenLine="3" tokenColumn="64">
<TOKEN tokenValue="IPageIdentifier" tokenLine="3" tokenColumn="64"/>
</IDENTIFIER>
</qualifiedIdentifier>
<SEMI tokenValue=";" tokenLine="3" tokenColumn="79">
<TOKEN tokenValue=";" tokenLine="3" tokenColumn="79"/>
</SEMI>
</importDeclaration>
<typeDeclaration tokenValue="public" tokenLine="8" tokenColumn="0">
<modifier tokenValue="public" tokenLine="8" tokenColumn="0">
<PUBLIC tokenValue="public" tokenLine="8" tokenColumn="0">
<TOKEN tokenValue="public" tokenLine="8" tokenColumn="0"/>
</PUBLIC>
</modifier>
<classDeclaration tokenValue="class" tokenLine="8" tokenColumn="7">
<CLASS tokenValue="class" tokenLine="8" tokenColumn="7">
<TOKEN tokenValue="class" tokenLine="8" tokenColumn="7"/>
</CLASS>
<IDENTIFIER tokenValue="ViolationRule" tokenLine="8" tokenColumn="13">
<TOKEN tokenValue="ViolationRule" tokenLine="8" tokenColumn="13"/>
</IDENTIFIER>
<classBody tokenValue="{" tokenLine="8" tokenColumn="27">
<LWING tokenValue="{" tokenLine="8" tokenColumn="27">
<TOKEN tokenValue="{" tokenLine="8" tokenColumn="27"/>
</LWING>
<classBodyDeclaration tokenValue="public" tokenLine="10" tokenColumn="1">
<modifier tokenValue="public" tokenLine="10" tokenColumn="1">
<PUBLIC tokenValue="public" tokenLine="10" tokenColumn="1">
<TOKEN tokenValue="public" tokenLine="10" tokenColumn="1"/>
</PUBLIC>
</modifier>
<modifier tokenValue="static" tokenLine="10" tokenColumn="8">
<STATIC tokenValue="static" tokenLine="10" tokenColumn="8">
<TOKEN tokenValue="static" tokenLine="10" tokenColumn="8"/>
</STATIC>
</modifier>
<memberDecl tokenValue="void" tokenLine="10" tokenColumn="15">
<VOID tokenValue="void" tokenLine="10" tokenColumn="15">
<TOKEN tokenValue="void" tokenLine="10" tokenColumn="15"/>
</VOID>
<IDENTIFIER tokenValue="main" tokenLine="10" tokenColumn="20">
<TOKEN tokenValue="main" tokenLine="10" tokenColumn="20"/>
</IDENTIFIER>
<voidMethodDeclaratorRest tokenValue="(" tokenLine="10" tokenColumn="24">
<formalParameters tokenValue="(" tokenLine="10" tokenColumn="24">
<LPAR tokenValue="(" tokenLine="10" tokenColumn="24">
<TOKEN tokenValue="(" tokenLine="10" tokenColumn="24"/>
</LPAR>
<formalParameterDecls tokenValue="final" tokenLine="10" tokenColumn="25">
<FINAL tokenValue="final" tokenLine="10" tokenColumn="25">
<TOKEN tokenValue="final" tokenLine="10" tokenColumn="25"/>
</FINAL>
<type tokenValue="String" tokenLine="10" tokenColumn="31">
<classType tokenValue="String" tokenLine="10" tokenColumn="31">
<IDENTIFIER tokenValue="String" tokenLine="10" tokenColumn="31">
<TOKEN tokenValue="String" tokenLine="10" tokenColumn="31"/>
</IDENTIFIER>
</classType>
<dim tokenValue="[" tokenLine="10" tokenColumn="37">
<LBRK tokenValue="[" tokenLine="10" tokenColumn="37">
<TOKEN tokenValue="[" tokenLine="10" tokenColumn="37"/>
</LBRK>
<RBRK tokenValue="]" tokenLine="10" tokenColumn="38">
<TOKEN tokenValue="]" tokenLine="10" tokenColumn="38"/>
</RBRK>
</dim>
</type>
<formalParametersDeclsRest tokenValue="args" tokenLine="10" tokenColumn="40">
<variableDeclaratorId tokenValue="args" tokenLine="10" tokenColumn="40">
<IDENTIFIER tokenValue="args" tokenLine="10" tokenColumn="40">
<TOKEN tokenValue="args" tokenLine="10" tokenColumn="40"/>
</IDENTIFIER>
</variableDeclaratorId>
</formalParametersDeclsRest>
</formalParameterDecls>
<RPAR tokenValue=")" tokenLine="10" tokenColumn="44">
<TOKEN tokenValue=")" tokenLine="10" tokenColumn="44"/>
</RPAR>
</formalParameters>
<methodBody tokenValue="{" tokenLine="10" tokenColumn="46">
<block tokenValue="{" tokenLine="10" tokenColumn="46">
<LWING tokenValue="{" tokenLine="10" tokenColumn="46">
<TOKEN tokenValue="{" tokenLine="10" tokenColumn="46"/>
</LWING>
<blockStatements/>
<RWING tokenValue="}" tokenLine="12" tokenColumn="1">
<TOKEN tokenValue="}" tokenLine="12" tokenColumn="1"/>
</RWING>
</block>
</methodBody>
</voidMethodDeclaratorRest>
</memberDecl>
</classBodyDeclaration>
<RWING tokenValue="}" tokenLine="14" tokenColumn="0">
<TOKEN tokenValue="}" tokenLine="14" tokenColumn="0"/>
</RWING>
</classBody>
</classDeclaration>
</typeDeclaration>
<EOF tokenValue="" tokenLine="14" tokenColumn="1"/>
</compilationUnit>
我在下面生成了查询,我需要知道它是否正确,如果没有,任何人都可以帮助我找到正确的查询
XPATH查询:
//importDeclaration//qualifiedIdentifier//IDENTIFIER/ TOKEN[@tokenValue='v73' or @tokenValue='v72' or @tokenValue='v71' or @tokenValue='v70']
提前感谢您的帮助
答案 0 :(得分:2)
我在下面生成了查询,我需要知道它是否正确,
您可以通过simply running it自行查看。如您所见,结果为<TOKEN tokenColumn="34" tokenLine="3" tokenValue="v73"/>
。如果这是预期的结果,那就有效。
//importDeclaration//qualifiedIdentifier//IDENTIFIER/ TOKEN[@tokenValue='v73' or @tokenValue='v72' or @tokenValue='v71' or @tokenValue='v70']
//expr
表示:从当前节点开始,遍历所有后代并找到匹配的节点expr
。你反复重复这一点,但这没什么价值。
相反,你可以写
//IDENTIFIER/TOKEN[@tokenValue='v73' or @tokenValue='v72' or @tokenValue='v71' or @tokenValue='v70']`
在父级为IDENTIFIER
的任意深度搜索令牌,或者,如果您希望祖先在那里,您可以执行以下操作,这样做效率更高:
//IDENTIFIER/TOKEN[@tokenValue='v73' or @tokenValue='v72' or @tokenValue='v71' or @tokenValue='v70'][ancestor::qualifiedIdentifier[ancestor::importDeclaration]]
注意,在XPath 2.0和3.0中,您可以编写更简单,更简洁的内容,如下所示,但当然,它需要XPath 2.0或3.0处理器。
//IDENTIFIER/TOKEN[@tokenValue=('v73', 'v72', 'v71','v70')]