2016-06-22 64 views
2

由於返回的XML:如何屬性和元素節點之間的區別從撒克遜XPathSelector

<level1> 
    <level2>Text</level2> 
    </level1> 

我正在使用Java中的Saxon 9.6的a9api接口。

我發現我可以調用XdmValue.toString()來獲取XPath評估結果的XML序列化,這會得到我想要的結果來選擇元素,但在選擇屬性時返回name="value"。我可以撥打電話XdmItem.getStringValue()來獲取string value,這爲我獲得了屬性的正確值,但返回了元素的文本內容。

邁克爾凱先前said "Saxon's s9api interface ... returns XdmValue objects whose type you can interrogate"。我可以看到我可以執行instanceof檢查以確定它是否是XdmAtomicValue,XdmExternalObject,XdmFunctionItemXdmNode,但元素和屬性都是XdmNode的實例。我如何區分這兩者?

(我不能修改的XPath,因爲它們可以由用戶提供。)

回答

3

我發現就在我寫完這個問題的答案,所以我會爲其他人共享。

鑄造XdmItemXdmNode,可以調用XdmNode.getNodeKind(),其從XdmNodeKind枚舉指定它是哪種類型的節點返回一個值後:

 XdmValue matchList = xPathSelector.evaluate(); 
     XdmItem firstItem = matchList.itemAt(0); 
     if (firstItem instanceof XdmNode) { 
      XdmNode xdmNode = (XdmNode) firstItem; 
      XdmNodeKind nodeKind = xdmNode.getNodeKind(); 
      if (nodeKind == XdmNodeKind.ELEMENT) { 
       return xdmNode.toString(); 
      } 
     } 
     return firstItem.getStringValue(); 
相關問題