在Apache Abdera中避免字符编码

时间:2013-06-17 12:39:20

标签: java atom-feed apache-abdera

我正在编写一个简单的文章编辑器,它将与CMS系统一起使用,该系统提供了一个Atom API来添加/编辑文章。要与CMS通信,我使用的是Apache Abdera库。但我遇到了字符编码的问题。发送到CMS的数据将按如下方式编码:

<entry>
  <content xmlns:vdf="http://www.vizrt.com/types" type="xml">
    <vdf:payload>
      <vdf:field name="body">
        <vdf:value>&lt;div xmlns="http://www.w3.org/1999/xhtml">&lt;p>Text comes here&lt;/p>&lt;/div></vdf:value>
      </vdf:field>
    </vdf:payload>
  </content>
</entry>

但CMS系统要求:

<entry>
  <content xmlns:vdf="http://www.vizrt.com/types" type="xml">
    <vdf:payload>
      <vdf:field name="body">
        <vdf:value><div xmlns="http://www.w3.org/1999/xhtml"><p>Text comes here</p></div></vdf:value>
      </vdf:field>
    </vdf:payload>
  </content>
</entry>

换句话说,没有角色逃脱。有谁知道如何使用Apache Abdera实现这一目标?

1 个答案:

答案 0 :(得分:0)

我不完全熟悉abdera的内部因素,因此无法准确解释这里发生的事情,但我认为,如果你不想让abdera逃脱,你就不能使用字符串或纯文本作为值。东西。相反,您必须使用带有abdera-type Element的{​​{1}}。

这样的事情对我有用:

XHtml

现在,String body = "<p>Text comes here</p>" //put the text into an XHtml-Element (more specificly an instance of Div) //I "misuse" a Content object here, because Content offers type=XHtml. Maybe there are better ways. Element el = abdera.getFactory().newContent(Content.Type.XHTML).setValue(body).getValueElement(); //now create your empty <vdf:value/> node. QName valueQName = new QName("http://your-vdf-namespace", "value", "vdf"); ExtensibleElement bodyValue = new ExtensibleElementWrapper(abdera.getFactory(),valueQName); //now attach the Div to that empty node. Not sure what's happening here internally, but this worked for me :) bodyValue.addExtension(el); 可用作您的字段的值,而Abdera应该正确渲染所有内容。