2009-06-11 64 views
2

我正在使用JDOM。我想不出一個解決方案,它本質上應該是一個簡單的問題。如何將XHTML插入到XML中

我有一個有效的XHTML字符串:

<b>M&amp;A</b> &euro;

如何插入XML DOM如下呢?

<parentNode>
    <b>M&amp;A</b>
    €
</parentNode>

(這個XML然後熄滅一個XSL轉換,然後呈現XHTML的瀏覽器)

我來了用以下「僞」解決方案,但我不確定它們是否可能:

不是XML實體的Unescape實體,然後插入。
Reinscape只有XML entites,然後HTML unescape整個字符串,然後插入。

塔拉斯

回答

2

我想你可以使用JTidy來將命名實體轉換爲數字。之後,XHTML也是有效的XML。

+0

這就是我最終做的: *解析輸入XHTML片段作爲HTML到使用JTidy 一個DOM *使用XPath(/ HTML /體/節點())提取物體的所有子節點 *插入提取節點到目標XML DOM 唯一需要注意的是'是一個有效的XHTML實體,但不是有效的HTML實體。這意味着第一步不會將序列看作是:'作爲撇號,而是作爲6個單獨的字符。我通過用數字引用替換'的所有實例來解決這個問題(一個黑客的位,但它的工作原理) – Taras 2009-06-14 12:16:12

+0

我確信有一種方法可以告訴JTidy將所有命名實體引用替換爲已編號的實體引用。在命令行上這是「-n」。還有一個開關使它產生有效的XML。我認爲Java庫可以做同樣的事情。 – Tomalak 2009-06-14 12:27:02

0

雖然&歐元;是有效的XHTML實體,它是無效的XML之一。

不幸的是,我對JDOM一無所知,但如果可能的話,您可以嘗試添加DTD entity declarations,比如<!ENTITY euro "€">。也許,把所有的XHTML標籤放到他們自己的名字空間中(<parentNode xmlns:x="http://www.w3.org/1999/xhtml"><x:b>...</x:b></parentNode>

+0

該解決方案已經考慮過,但是我們必須爲所有可能的HTML(XHTML?)實體做這件事 - http://www.cookwood.com/html/extras/entities.html – Taras 2009-06-12 09:35:24

0

創建包含

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html> 

+

您的XHTML內容的字符串,在這種情況下<b>M&amp;A</b> &euro;

+

</html> 

,然後解析這個字符串來獲得的文件。然後獲取根元素中的所有內容,這將是您的XHTML內容並將其放入您的parentNode元素中。您可能需要考慮到內容來自不同的文檔。