Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAXB:将Javabean对象转换为XML所有属性作为XML属性而不是XML元素(节点)_Java_Xml_Jaxb - Fatal编程技术网

JAXB:将Javabean对象转换为XML所有属性作为XML属性而不是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

目前我正在将对象转换为XML,我注意到所有对象属性都列为XML元素(节点),除非您在特定的getter或设置上使用@XmlAttribute

只是想知道是否有一种方法可以在JAXB中将所有对象属性自动转换为XML属性

示例代码:

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已提交以下增强请求以添加此行为

  • -增强:为属性(而不是元素)的默认简单属性提供元数据

注意:我是专家组的负责人和成员

目前没有一种方法可以配置默认情况下简单属性映射到XML属性。MOXy已提交以下增强请求以添加此行为

  • -增强:为属性(而不是元素)的默认简单属性提供元数据

是的,但这是否意味着每次我们引入新元素时,我们也必须更新XSD?好的,您只需要更新XSD,编译它,然后就有了Java文件。至少你必须在某处引入元素;-)在我看来,与带有JAXB注释的Java文件相比,XSD要容易得多。谢谢它的帮助,对不起,我没有足够的声誉来投票:SYep,但这是否意味着每次我们引入一个新元素时,我们也必须更新XSD?好吧,你只需要更新XSD,编译它,然后你就有了Java文件。至少你必须在某处引入元素;-)在我看来,与带有JAXB注释的Java文件相比,XSD要容易得多。谢谢它的帮助,很抱歉我没有足够的声誉来投票:S
@XmlRootElement
不是必需的,因为您可以将根对象包装在
JAXBElement
的实例中:是的,这与问题无关,我读错了。但是没有任何配置来执行问题中提出的@Blaise?
@XmlRootElement
不是必需的,因为您可以将根对象包装在
JAXBElement
的实例中:是的,这也与问题无关,我读错了。但是没有任何配置可以执行问题中提出的@Blaise?谢谢!在此期间,我可能会以其他方式解决这个问题。请随时更新!谢谢在此期间,我可能会以其他方式解决这个问题。请随时更新!