【发布时间】:2010-06-08 10:15:41
【问题描述】:
我正在尝试使用内容本身是 HTML 的 Stax 编写 XML 数据
如果我尝试
xtw.writeStartElement("contents");
xtw.writeCharacters("<b>here</b>");
xtw.writeEndElement();
我明白了
<contents><b>here</b></contents>
然后我注意到 CDATA 方法并将我的代码更改为:
xtw.writeStartElement("contents");
xtw.writeCData("<b>here</b>");
xtw.writeEndElement();
这一次的结果是
<contents><![CDATA[<b>here</b>]]></contents>
这仍然不好。 我真正想要的是
<contents><b>here</b></contents>
那么,是否有一个 XML API/Library 允许我在不进入 CDATA 部分的情况下编写原始文本?到目前为止,我已经查看了 Stax 和 JDom,但他们似乎没有提供这个。
最后我可能会求助于好的旧 StringBuilder 但这并不优雅。
更新:
到目前为止,我大多同意这些答案。但是,我可以有一个 1MB 的 HTML 文档,而不是 <b>here</b>,我想将它嵌入到更大的 XML 文档中。你的建议意味着我必须解析这个 HTML 文档才能理解它的结构。如果可能的话,我想避免这种情况。
答案:
这是不可能的,否则您可能会创建无效的 XML 文档。
【问题讨论】:
-
如果这是可能的,那么您很容易编写无效的 XML 文件。并不是说大多数现实世界的 HTML(不是 XHTML)是不是有效的 XML(太多未闭合的标签和未转义的属性)。所有这些对于 HTML 来说都很好,但对于 XML 是不允许的,所以使用 CDATA 确实是唯一正确的做法,除非您的 HTML 实际上是 XHTML。
-
@Joachim。是的,就我而言,它是 XHTML。这就是为什么我知道它是有效的并且我想立即将其嵌入而不进行任何处理。