JAXB - 如何定义映射 class 以生成节点文本值

JAXB - How to define mapped class to generate node text value

我将 classes 定义为:

@XmlRootElement( name = "RootNode" )
public class RootNode{
.....
    @XmlElement( name = "code", required = true )
    protected CodeWord code;

    @XmlElement( name = "text" )
    protected EncText text;
.....
}

虽然 class EncText 看起来像:

@XmlType( name = "EncText ",
        propOrder = {
                "language"
        } )
public class EncText {
.....
    @XmlElement( name = "language" )
    protected LANG language;

    @XmlAttribute( name = "mediaType" )
    @XmlJavaTypeAdapter( CollapsedStringAdapter.class )
    protected String mediaType;
.....
}

在 EncText 中,我可能有需要添加为文本节点的文本数据。我希望在编组后得到输出,例如:

<RootNode>
    <text mediaType="plain/text">
        Data come from database.
    </text>
</RootNode>

我如何定义 属性,例如 EncText,以及适当的 setter 和 getter 以允许我这样做?我试图在 EncText 中定义一个 @XmlValue 属性。但是,错误显示 XmlElement 不能与 XmlValue 共存。我需要这方面的建议。非常感谢。

I tried to define a @XmlValue property in EncText.

这应该可以正常工作,但由于您没有展示您尝试过的内容,因此方法如下:

@XmlRootElement( name = "RootNode" )
class RootNode {
    @XmlElement( name = "text" )
    protected EncText text;
}
class EncText {
    @XmlAttribute( name = "mediaType" )
    protected String mediaType;

    @XmlValue
    protected String textValue;
}

测试

RootNode rootNode = new RootNode();
rootNode.text = new EncText();
rootNode.text.mediaType = "plain/text";
rootNode.text.textValue = "Data come from database.";

JAXBContext jaxbContext = JAXBContext.newInstance(RootNode.class);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(rootNode, System.out);

输出

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<RootNode>
    <text mediaType="plain/text">Data come from database.</text>
</RootNode>