2011-08-10 66 views
4

有沒有方法可以確定XPath評估的返回類型是什麼?我希望XPath儘可能一致地匹配。它應該匹配一個節點列表,如果不能,節點,如果不能,一個值。有沒有簡單的方法來在Java中實現這一點?Java XPath評估返回類型

回答

2

JAXP XPath API的設計有很多困難,這就是其中之一。考慮使用Saxon作爲XPath處理器,它將(a)使您能夠使用XPath 2.0,並且(b)爲您提供更豐富的s9api API的好處。 [無恥插頭]

1

您應該知道評估的返回類型,因爲您已將其提供給evaluate。例如:

XPath xpath = XPathFactory.newInstance().newXPath(); 
XPathExpression expr = xpath.compile("/expression"); 
NodeList nodes = (NodeList) expr.evaluate(doc, XPathConstants.NODESET); 

如果你正在處理,你沒有執行自己的評估結果(即你剛剛被交給一些Object),然後再打到正常instanceof檢查。

+0

我希望找到一種方法來調用它,而不知道返回類型,並獲得最廣泛的。 – Arash

1

不能使用標準的JAXP實現,但可以使用Jaxen。它有一個selectNodes()函數,它返回一個List對象。該列表將包含AttributeContent或文本(也許還有其他我還沒有遇到)。您需要將它傳遞給一個JDom文檔。

org.jdom.Document doc = builder.build(file); 
org.jdom.xpath.XPath xp = XPath.newInstance("expression here"); 
List nodes = xpath.selectNodes(document); 
for (Object node : nodes) { 
    if (node instanceof Attribute) { 
    value = ((Attribute) node).getValue(); 
    } else if (node instanceof Content) { 
    value = ((Content) node).getValue(); 
    } else if (node instanceof Text) { 
    value = (Text) node.getText(); 
    } 
}