簡體   English   中英

XPath,Java和序列化的xml

[英]XPath, Java and serialized xml

假設像

<foo>
  <bar>test</bar>
</foo>

用returnType = String計算表達式

/foo/bar

將返回“測試”。 但是,我想獲取序列化的xml,所以類似

<bar>test</bar>

應該返回。 由於無法在java的xpath實現中檢查returnType(xerces),因此我無法簡單地獲取對象作為結果,如果確實是節點,則將其轉換為序列化xml。

注意:我不知道表達式是否會真正返回一個節點,一個字符串,一個數字或任何其他形式,因此我無法為eval函數提供適當的返回類型,但字符串會出現問題(字符串會返回我的問題),而不會返回序列化的xml。

所以我很好奇->是否有Java或(首選)xpath-way(函數?)來獲取字符串類型(而不是所選節點的文本子代)的序列化xml?

謝謝! 亞歷克斯

使用xpath返回類型XPathConstants.NODE,然后您可以自己序列化返回的Node。

現在,您可以正確地發現很難發現結果的返回類型。 這是JAXP真正的設計弱點。

如果您遇到問題,請考慮使用Saxon的s9api接口,該接口返回XdmValue對象,您可以查詢其類型; 您還將獲得XPath 2.0訪問權限。

正如Michael Kay回答的那樣,這在JAXP(本地Java接口)中很困難。

在Kay先生的Saxon庫的s9api API中(請參閱使用s9api評估XPath表達式 ),一旦您調用XPathSelector.evaluate()XPathSelector.evaluateSingle() ,就可以通過調用XdmValue.toString()來獲取XML序列化。

但是,如果XPath選擇了一個屬性(例如//@name ),您仍將獲得XML序列化,例如name="value" 您可以調用XdmItem.getStringValue() ,但是對於元素,該方法將返回您已經看到的相同值-元素的文本內容,而不是序列化。 我已經分別發布了有關如何區分從Saxon s9api返回的屬性和元素的信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM