2009-06-11 69 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元素中。您可能需要考虑到内容来自不同的文档。