JAXB:将Javabean对象转换为XML所有属性作为XML属性而不是XML元素(节点)
目前我正在将对象转换为XML,我注意到所有对象属性都列为XML元素(节点),除非您在特定的getter或设置上使用@XmlAttribute 只是想知道是否有一种方法可以在JAXB中将所有对象属性自动转换为XML属性 示例代码:JAXB:将Javabean对象转换为XML所有属性作为XML属性而不是XML元素(节点),java,xml,jaxb,Java,Xml,Jaxb,目前我正在将对象转换为XML,我注意到所有对象属性都列为XML元素(节点),除非您在特定的getter或设置上使用@XmlAttribute 只是想知道是否有一种方法可以在JAXB中将所有对象属性自动转换为XML属性 示例代码: JAXBContext jc = JAXBContext.newInstance( foo.class ); Marshaller m = jc.createMarshaller(); m.setProperty(Marshaller.JAXB_FORMATTED_OU
JAXBContext jc = JAXBContext.newInstance( foo.class );
Marshaller m = jc.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
m.setProperty(Marshaller.JAXB_FRAGMENT, true);
Foo foo = new foo();
foo.setType("type");
foo.setValue("value");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
m.marshal(foo, baos);
您试过在类顶级使用@XmlRootElement吗?您试过在类顶级使用@XmlRootElement吗?如果您对复杂模式使用JAXB,最好在
XSD
中定义结构:
<xsd:schema targetNamespace="http://myUri"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="parent">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="child" maxOccurs="1"/>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:long"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="child">
<xsd:complexType>
<xsd:attribute name="id" type="xsd:long"/>
<xsd:attribute name="name" type="xsd:string"/>
<xsd:attribute name="code" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
这可以使用
jaxbxjc
到.java
文件进行编译,您将在java中定义xsd:attributes作为属性。如果您将jaxb用于复杂模式,最好在xsd
中定义结构:
<xsd:schema targetNamespace="http://myUri"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="parent">
<xsd:complexType>
<xsd:sequence>
<xsd:element ref="child" maxOccurs="1"/>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:long"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="child">
<xsd:complexType>
<xsd:attribute name="id" type="xsd:long"/>
<xsd:attribute name="name" type="xsd:string"/>
<xsd:attribute name="code" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
这可以使用
jaxbxjc
到.java
文件进行编译,您将在java中定义xsd:attributes作为属性。注意:我是专家组的负责人和成员
目前没有一种方法可以配置默认情况下简单属性映射到XML属性。MOXy已提交以下增强请求以添加此行为
- -增强:为属性(而不是元素)的默认简单属性提供元数据
- -增强:为属性(而不是元素)的默认简单属性提供元数据
@XmlRootElement
不是必需的,因为您可以将根对象包装在JAXBElement
的实例中:是的,这与问题无关,我读错了。但是没有任何配置来执行问题中提出的@Blaise?@XmlRootElement
不是必需的,因为您可以将根对象包装在JAXBElement
的实例中:是的,这也与问题无关,我读错了。但是没有任何配置可以执行问题中提出的@Blaise?谢谢!在此期间,我可能会以其他方式解决这个问题。请随时更新!谢谢在此期间,我可能会以其他方式解决这个问题。请随时更新!