一个废弃导入的

时间:2015-09-08 09:44:32

标签: xml xpath

我试图从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']

提前感谢您的帮助

1 个答案:

答案 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')]