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>
我将 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>