1
再次我有一個從的XPath尋找元素基於祖先元素
public class Test {
String o = new String("hh");
public void wrong1() {
synchronized(o) {
// huhu
}
}
}
創建我嘗試創建一個XPath查詢其找到synchronized塊,其中定義字符串變量o
是用java AST。
由於定義是它上面是SynchronizedStatement的祖先,但我不明白它的工作
//SynchronizedStatement[Expression/PrimaryExpression/PrimaryPrefix/Name[@Image=ancestor::ClassOrInterfaceBody[ClassOrInterfaceBodyDeclaration/FieldVariableDeclaratorId/@Image]]]
我知道/SynchronizedStatement[Expression/PrimaryExpression/PrimaryPrefix/Name[@Image=
是正確的,我的問題是如何解決的祖先ClassOrInterfaceBody部分。
希望其明確我的意思;-)
感謝
感謝那個 - 那個工作。 但另一個問題 - 基本上我想檢查兩個@Image是相同的,但只有當變量是一個字符串。 so Object o = new Object();不應該匹配... 如何組合這兩個條件a)@Image檢查,並且找到的祖先元素也是String類型。 我知道如何檢查它是否是一個字符串,但不知道如何組合搜索(他們正在同一個節點上工作)。 謝謝 – martymcfly 2010-03-25 13:27:43
@martymcfly什麼是測試字符串類型,以及在什麼節點上? – 2010-03-25 13:34:03
基本上在上面的祖先。 僞像 圖像相比 '祖先:ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/FieldDeclaration/VariableDeclarator/VariableDeclaratorId/@ Image' 和字符串比較對那個祖先 '祖先:: ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration /制FieldDeclaration/Type/ReferenceType/ClassOrInterfaceType [@ Image ='String']' 所以基本上'FieldDeclaration'是包含關於String和Name的信息的節點。但是'ClassOrInterfaceBody'是這個的共同祖先,並且Synchron.Statements – martymcfly 2010-03-25 13:39:01