【问题标题】:What is the Jaxb equivalent of a Text node value?文本节点值的 Jaxb 等价物是什么?
【发布时间】:2010-12-02 12:51:13
【问题描述】:

我希望转换一个看起来像这样的类...

public class Amenity {
   public String id;
   public String value;
}

使用 JaxB 注释进入以下 XML:

<amenity id="id-string-here">value-string-here</amenity>

有谁知道在value 成员变量上使用什么注释来完成这个?到目前为止,我得到的最接近的是:

@XmlRootElement
public class Amenity {
   @XmlAttribute
   public String id;
   @XmlElement
   public String value;
}

不幸的是,这种方法不允许我指定 value 成员变量不应呈现为它自己的标签 &lt;value&gt;&lt;/value&gt;

【问题讨论】:

  • 正如许多人所提到的,这个问题的标题具有误导性,因为它询问了如何呈现 CDATA 块,但上面的示例并没有清楚地说明这一点。在我发布时,我不需要 CDATA 块,只需要了解 @XmlValue 注释。这就是为什么我将答案授予 jarnbjo。从那时起,我确实需要有关如何生成 CDATA 块的信息。所以随后的答案也非常有帮助。我都投了赞成票。感谢大家的帮助!

标签: java xml-serialization annotations jaxb jaxb2


【解决方案1】:

This documentation 写道:

问。如何使 Marshaller 生成 CDATA 块?

A.此功能不能直接从 JAXB 获得,但您可以配置 Apache Xerces-J XMLSerializer 以生成 CDATA 块。请查看 JaxbCDATASample.java 示例应用了解更多详细信息。

(顺便说一句,这并不能回答您的特定问题,但由于问题标题具有误导性,这是jaxb CDATA 的第一个谷歌结果,我正在回答一个有点不同的问题)

【讨论】:

    【解决方案2】:

    我对此不是 100% 确定,但请尝试使用 @XmlValue 注释而不是 @XmlElement

    【讨论】:

      【解决方案3】:

      看起来问题是指文本节点而不是 CDATA 节点,但这里有一个关于 EclipseLink JAXB (MOXy) 如何处理 CDATA 的链接:

      【讨论】:

      • 不知道为什么这个答案被否决了。它是为了根据标题发现问题的人的利益而留下的。对于它的价值,我在离开之前对 jarnbjo 的@XmlValue 答案投了赞成票。
      • 感谢您的参考。令人惊讶的是,CDATA 不被视为现有规范的一部分,但我想只要 StringWriters 正确编码内部标记,就不需要它。
      【解决方案4】:

      JAXB 不支持对/从 CDATA xml 类型进行编组/编组。

      【讨论】:

      猜你喜欢
      • 2012-08-30
      • 2011-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-08
      • 2014-06-12
      • 1970-01-01
      • 2022-11-28
      相关资源
      最近更新 更多