加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

将xml转换为java bean

发布时间:2020-12-16 07:59:31 所属栏目:百科 来源:网络整理
导读:如何将xml文件转换为简单的java bean? 它是一个简单的xml文件,没有任何xsd,它是从java bean生成的,我无权访问它. 我尝试使用xmlbeans首先从xml生成xmd,然后从xsd生成类.我有一堆课.我正在寻找一个java bean类. JAXB JAXB(JSR-222)提供了一种将对象转换为XML
如何将xml文件转换为简单的java bean?
它是一个简单的xml文件,没有任何xsd,它是从java bean生成的,我无权访问它.

我尝试使用xmlbeans首先从xml生成xmd,然后从xsd生成类.我有一堆课.我正在寻找一个java bean类.

JAXB

JAXB(JSR-222)提供了一种将对象转换为XML的简便方法.该标准有许多开源实现,包括:

> Metro JAXB(Java SE 6中包含的参考实现)
> EclipseLink JAXB (MOXy),我是技术主管
> Apache JaxMe

JAXB具有Java对象到XML的默认映射.可以通过应用注释来定制此映射.

import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.Element;

@XmlRootElement
public class Address {

    private String street;

    private String city;

    private String state;

    private String country;

    @XmlElement(name="postal-code")
    private String postalCode;

}

将对应以下XML:

<address>
    <street>123 A Street</street>
    <city>Any Town</city>
    <state>A State</state>
    <postal-code>12345</postal-code>
</address>

EclipseLink JAXB(MOXy)

MOXy有一个基于XPath的映射扩展.这意味着我们可以使用相同的Address类并将其映射到Google的地理编码格式:

import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

import org.eclipse.persistence.oxm.annotations.XmlPath;

@XmlRootElement(name="kml")
@XmlType(propOrder={"country","state","city","street","postalCode"})
public class Address {

    @XmlPath("Response/Placemark/ns:AddressDetails/ns:Country/ns:AdministrativeArea/ns:SubAdministrativeArea/ns:Locality/ns:Thoroughfare/ns:ThoroughfareName/text()")
    private String street;

    @XmlPath("Response/Placemark/ns:AddressDetails/ns:Country/ns:AdministrativeArea/ns:SubAdministrativeArea/ns:Locality/ns:LocalityName/text()")
    private String city;

    @XmlPath("Response/Placemark/ns:AddressDetails/ns:Country/ns:AdministrativeArea/ns:AdministrativeAreaName/text()")
    private String state;

    @XmlPath("Response/Placemark/ns:AddressDetails/ns:Country/ns:CountryNameCode/text()")
    private String country;

    @XmlPath("Response/Placemark/ns:AddressDetails/ns:Country/ns:AdministrativeArea/ns:SubAdministrativeArea/ns:Locality/ns:PostalCode/ns:PostalCodeNumber/text()")
    private String postalCode;

}

上面的类对应于以下XML:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.0" xmlns:ns="urn:oasis:names:tc:ciq:xsdschema:xAL:2.0">
    <Response>
        <Placemark>
            <ns:AddressDetails>
                <ns:Country>
                    <ns:CountryNameCode>US</ns:CountryNameCode>
                    <ns:AdministrativeArea>
                        <ns:AdministrativeAreaName>CA</ns:AdministrativeAreaName>
                        <ns:SubAdministrativeArea>
                            <ns:Locality>
                                <ns:LocalityName>Mountain View</ns:LocalityName>
                                <ns:Thoroughfare>
                                    <ns:ThoroughfareName>1600 Amphitheatre Pkwy</ns:ThoroughfareName>
                                </ns:Thoroughfare>
                                <ns:PostalCode>
                                    <ns:PostalCodeNumber>94043</ns:PostalCodeNumber>
                                </ns:PostalCode>
                            </ns:Locality>
                        </ns:SubAdministrativeArea>
                    </ns:AdministrativeArea>
                </ns:Country>
            </ns:AddressDetails>
        </Placemark>
    </Response>
</kml>

了解更多信息

> XPath Based Mapping – Geocode Example
> Map to Element based on an Attribute Value with EclipseLink JAXB (MOXy)
> XPath Based Mapping

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读