我遇到了一些麻煩,使用XPath。 (後來我想在SonarQube上添加我的表達式來規則xpath模式,所以我可以在那裏創建我自己的規則,但是SonarQube不是必需的)訪問XPath中的註釋和/或TRIVIA文件
我想創建一個規則,如果分析了項目並拋出異常在我的Java項目(例如myXPathTry.java)的評論(例如「錯誤」)中寫了一些特別的東西。
我正在測試我的這個SSLR Toolkit的所有表情。只需要下載並執行它。
用法很簡單:在左側添加您的代碼,點擊框旁邊的「解析源代碼」。然後在底部的框中添加您的xpath規則,最後點擊「評估XPath」。結果應該被標記。如果您單擊右側框上方的xml按鈕,您也可以查看自動創建的源代碼XML。
我的問題是:所有的註釋都保存在「無法訪問」的TRIVIA路徑中(正如您在AST中所見)。我可以訪問所有其他的東西,並檢查值和參數,但不是這個TRIVIA的東西。 (JavaCode,AST(抽象語法樹)和XML添加到下面)。
你知道我如何獲得評論的方式嗎? 感謝您的幫助! :)
Already tested:
neighter //*/comment() , nor //*/TOKEN/TRIVIA does have any effect.
//*/TOKEN works and has affect, but does not contain the needed information.
Java代碼:
public class MyXPathTry{
public static void main(String[] args){
System.out.println("Just to have some code");
//This is a comment
/* This is a second comment */
/* This is a second comment with ERROR*/
}
}
在AST藍線(RWING,如果圖像是不visable)是selectet後,我在左邊任何評論點擊的工具包。向下的路徑默認情況下不是打開的。我打開RWING和令牌子由我自己,只是告訴你我是什麼意思瑣事文件)
Toolkit Auto-Created XML:
<compilationUnit tokenValue="public" tokenLine="1" tokenColumn="0">
<typeDeclaration tokenValue="public" tokenLine="1" tokenColumn="0">
<modifier tokenValue="public" tokenLine="1" tokenColumn="0">
<PUBLIC tokenValue="public" tokenLine="1" tokenColumn="0">
<TOKEN tokenValue="public" tokenLine="1" tokenColumn="0"/>
</PUBLIC>
</modifier>
<classDeclaration tokenValue="class" tokenLine="1" tokenColumn="7">
<CLASS tokenValue="class" tokenLine="1" tokenColumn="7">
<TOKEN tokenValue="class" tokenLine="1" tokenColumn="7"/>
</CLASS>
<IDENTIFIER tokenValue="MyXPathTry" tokenLine="1" tokenColumn="13">
<TOKEN tokenValue="MyXPathTry" tokenLine="1" tokenColumn="13"/>
</IDENTIFIER>
<classBody tokenValue="{" tokenLine="1" tokenColumn="23">
<LWING tokenValue="{" tokenLine="1" tokenColumn="23">
<TOKEN tokenValue="{" tokenLine="1" tokenColumn="23"/>
</LWING>
<classBodyDeclaration tokenValue="public" tokenLine="2" tokenColumn="4">
<modifier tokenValue="public" tokenLine="2" tokenColumn="4">
<PUBLIC tokenValue="public" tokenLine="2" tokenColumn="4">
<TOKEN tokenValue="public" tokenLine="2" tokenColumn="4"/>
</PUBLIC>
</modifier>
<modifier tokenValue="static" tokenLine="2" tokenColumn="11">
<STATIC tokenValue="static" tokenLine="2" tokenColumn="11">
<TOKEN tokenValue="static" tokenLine="2" tokenColumn="11"/>
</STATIC>
</modifier>
<memberDecl tokenValue="void" tokenLine="2" tokenColumn="18">
<VOID tokenValue="void" tokenLine="2" tokenColumn="18">
<TOKEN tokenValue="void" tokenLine="2" tokenColumn="18"/>
</VOID>
<IDENTIFIER tokenValue="main" tokenLine="2" tokenColumn="23">
<TOKEN tokenValue="main" tokenLine="2" tokenColumn="23"/>
</IDENTIFIER>
<voidMethodDeclaratorRest tokenValue="(" tokenLine="2" tokenColumn="27">
<formalParameters tokenValue="(" tokenLine="2" tokenColumn="27">
<LPAR tokenValue="(" tokenLine="2" tokenColumn="27">
<TOKEN tokenValue="(" tokenLine="2" tokenColumn="27"/>
</LPAR>
<formalParameterDecls tokenValue="String" tokenLine="2" tokenColumn="28">
<type tokenValue="String" tokenLine="2" tokenColumn="28">
<classType tokenValue="String" tokenLine="2" tokenColumn="28">
<IDENTIFIER tokenValue="String" tokenLine="2" tokenColumn="28">
<TOKEN tokenValue="String" tokenLine="2" tokenColumn="28"/>
</IDENTIFIER>
</classType>
<dim tokenValue="[" tokenLine="2" tokenColumn="34">
<LBRK tokenValue="[" tokenLine="2" tokenColumn="34">
<TOKEN tokenValue="[" tokenLine="2" tokenColumn="34"/>
</LBRK>
<RBRK tokenValue="]" tokenLine="2" tokenColumn="35">
<TOKEN tokenValue="]" tokenLine="2" tokenColumn="35"/>
</RBRK>
</dim>
</type>
<formalParametersDeclsRest tokenValue="args" tokenLine="2" tokenColumn="37">
<variableDeclaratorId tokenValue="args" tokenLine="2" tokenColumn="37">
<IDENTIFIER tokenValue="args" tokenLine="2" tokenColumn="37">
<TOKEN tokenValue="args" tokenLine="2" tokenColumn="37"/>
</IDENTIFIER>
</variableDeclaratorId>
</formalParametersDeclsRest>
</formalParameterDecls>
<RPAR tokenValue=")" tokenLine="2" tokenColumn="41">
<TOKEN tokenValue=")" tokenLine="2" tokenColumn="41"/>
</RPAR>
</formalParameters>
<methodBody tokenValue="{" tokenLine="2" tokenColumn="42">
<block tokenValue="{" tokenLine="2" tokenColumn="42">
<LWING tokenValue="{" tokenLine="2" tokenColumn="42">
<TOKEN tokenValue="{" tokenLine="2" tokenColumn="42"/>
</LWING>
<blockStatements tokenValue="System" tokenLine="3" tokenColumn="1">
<blockStatement tokenValue="System" tokenLine="3" tokenColumn="1">
<statement tokenValue="System" tokenLine="3" tokenColumn="1">
<expressionStatement tokenValue="System" tokenLine="3" tokenColumn="1">
<statementExpression tokenValue="System" tokenLine="3" tokenColumn="1">
<expression tokenValue="System" tokenLine="3" tokenColumn="1">
<primary tokenValue="System" tokenLine="3" tokenColumn="1">
<qualifiedIdentifier tokenValue="System" tokenLine="3" tokenColumn="1">
<IDENTIFIER tokenValue="System" tokenLine="3" tokenColumn="1">
<TOKEN tokenValue="System" tokenLine="3" tokenColumn="1"/>
</IDENTIFIER>
<DOT tokenValue="." tokenLine="3" tokenColumn="7">
<TOKEN tokenValue="." tokenLine="3" tokenColumn="7"/>
</DOT>
<IDENTIFIER tokenValue="out" tokenLine="3" tokenColumn="8">
<TOKEN tokenValue="out" tokenLine="3" tokenColumn="8"/>
</IDENTIFIER>
<DOT tokenValue="." tokenLine="3" tokenColumn="11">
<TOKEN tokenValue="." tokenLine="3" tokenColumn="11"/>
</DOT>
<IDENTIFIER tokenValue="println" tokenLine="3" tokenColumn="12">
<TOKEN tokenValue="println" tokenLine="3" tokenColumn="12"/>
</IDENTIFIER>
</qualifiedIdentifier>
<identifierSuffix tokenValue="(" tokenLine="3" tokenColumn="19">
<arguments tokenValue="(" tokenLine="3" tokenColumn="19">
<LPAR tokenValue="(" tokenLine="3" tokenColumn="19">
<TOKEN tokenValue="(" tokenLine="3" tokenColumn="19"/>
</LPAR>
<expression tokenValue=""Just to have some code"" tokenLine="3" tokenColumn="20">
<primary tokenValue=""Just to have some code"" tokenLine="3" tokenColumn="20">
<literal tokenValue=""Just to have some code"" tokenLine="3" tokenColumn="20">
<LITERAL tokenValue=""Just to have some code"" tokenLine="3" tokenColumn="20">
<TOKEN tokenValue=""Just to have some code"" tokenLine="3" tokenColumn="20"/>
</LITERAL>
</literal>
</primary>
</expression>
<RPAR tokenValue=")" tokenLine="3" tokenColumn="44">
<TOKEN tokenValue=")" tokenLine="3" tokenColumn="44"/>
</RPAR>
</arguments>
</identifierSuffix>
</primary>
</expression>
</statementExpression>
<SEMI tokenValue=";" tokenLine="3" tokenColumn="45">
<TOKEN tokenValue=";" tokenLine="3" tokenColumn="45"/>
</SEMI>
</expressionStatement>
</statement>
</blockStatement>
</blockStatements>
<RWING tokenValue="}" tokenLine="7" tokenColumn="4">
<TOKEN tokenValue="}" tokenLine="7" tokenColumn="4"/>
</RWING>
</block>
</methodBody>
</voidMethodDeclaratorRest>
</memberDecl>
</classBodyDeclaration>
<RWING tokenValue="}" tokenLine="8" tokenColumn="0">
<TOKEN tokenValue="}" tokenLine="8" tokenColumn="0"/>
</RWING>
</classBody>
</classDeclaration>
</typeDeclaration>
<EOF tokenValue="" tokenLine="8" tokenColumn="1"/>
</compilationUnit>
。
這是一個「sonarqube」相關問題,你爲什麼刪除標籤? – Tomalak
因爲我不確定它會影響SonarQube。該工具包提供了有關SonarQube的一些信息,但您可以不使用它。如果它在工具包中工作,它也將在以後的SonarQube(V.3.7)中使用。 SonarQube目前還沒有影響這個xpath表達式,我想。但是我添加了SonarQube標籤。 – Krummy
我沒有看到任何類似於您向我們展示的XML中對這些評論的引用。如果它不在那裏,XPath將無法訪問它。 – keshlam