如何在CDATA之外编写非转义XML

kaz*_*aki 9 java xml stax escaping

我正在尝试使用Stax编写XML数据,其中内容本身是HTML

如果我试试

xtw.writeStartElement("contents");
xtw.writeCharacters("<b>here</b>");
xtw.writeEndElement();
Run Code Online (Sandbox Code Playgroud)

我明白了

<contents>&lt;b&gt;here&lt;/b&gt;</contents>
Run Code Online (Sandbox Code Playgroud)

然后我注意到CDATA方法并将我的代码更改为:

xtw.writeStartElement("contents");
xtw.writeCData("<b>here</b>");
xtw.writeEndElement();
Run Code Online (Sandbox Code Playgroud)

这次结果是

<contents><![CDATA[<b>here</b>]]></contents>
Run Code Online (Sandbox Code Playgroud)

这仍然不好.我真正想要的是

<contents><b>here</b></contents>
Run Code Online (Sandbox Code Playgroud)

那么是否有一个XML API /库允许我在不加入CDATA部分的情况下编写原始文本?到目前为止,我已经看过Stax和JDom了,他们似乎没有提供这个.

最后我可能会选择好的旧StringBuilder,但这不会很优雅.

更新:

到目前为止,我主要同意答案.但是,<b>here</b>我可以将1MB HTML文档嵌入到更大的XML文档中.你的建议意味着我必须解析这个HTML文档才能理解它的结构.如果可能的话,我想避免这种情况.

回答:

这是不可能的,否则您可能会创建无效的XML文档.

use*_*019 3

问题是这不是原始文本,它是一个元素,所以你应该写

xtw.writeStartElement("contents");
xtw.writeStartElement("b");
xtw.writeCData("here");
xtw.writeEndElement();
xtw.writeEndElement();
Run Code Online (Sandbox Code Playgroud)