以下XML如何在Java中使用XPath作爲節點訪問CDATA?
<a>foo <![CDATA[ MyCData]]> baz</a>
使用this網上的XPath測試儀與XPath表達式/a/text()
,我回來的所有文字
foo <![CDATA[ MyCData]]> baz
(這是結構爲三個節點,我們可以看到使用/a/text()[2]
,返回baz
。)
但是,使用javax.xml.xpath.XPath, CData an d最後的文本節點是而不是完全返回。我使用foo
獲得單個節點,而文本<![CDATA[ MyCData]]> baz
的其餘部分則不可用。無論XPath如何處理XML結構,如果我們根本無法訪問節點,那就是一個錯誤。
但是,如果我設置isCoalescing(真)在的DocumentBuilderFactory,它加到所有的文字和CDATA節點爲一體。我最終可能會使用它,但它會將CData轉換爲輸出中的轉義文本,即使標準允許,這看起來也很難看。另外,我更希望能夠將CData分別作爲某種節點來處理,無論是「只是」文本節點,還是某種特殊類型的CData節點。
順便說一句,如果在CDATA是它的父元素的只有內容,不帶空格或前面其他文本,一個普通的文本內容的XPath成功地檢索它,即使其默認isCoalescing( false)。因此,我們看到Java XPath始終返回第一個文本節點,並且只返回第一個文本節點。
當我審視我的DOM文檔的完整DOM樹,isCoalescing在其默認情況下,我發現,CDATA節被表示爲自己的類型CDATA段的節點,這是偉大的,但如何我可以在XPath中訪問此節點嗎?
也許這有助於:http://stackoverflow.com/questions/4184858/is-there-a-single-xpath-expression-i-can-use-to-navigate-xml-in-a-cdata-section – Sal
謝謝,但是有關XML _inside_ CData的討論。我只想要CData!在其他XPath引擎中,CData只是一個文本節點,但不是Java中描述的。 –