java - 将 xml 转换为 java bean

标签 java xml javabeans xmlbeans

如何将 xml 文件转换为简单的 java bean? 它是一个没有任何 xsd 的简单 xml 文件,它是从我无权访问的 java bean 生成的。

我尝试使用 xmlbeans 首先从 xml 生成 xmd,然后从 xsd 生成类。我有很多类(class)。我正在寻找单个 java bean 类。

最佳答案

JAXB

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

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 的映射扩展。这意味着我们可以采用相同的地址类并将其映射到 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> 

获取更多信息

关于java - 将 xml 转换为 java bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5827713/

相关文章:

.net - .NET 是否有向后的 XML 解析器?

java - 存储持久对象的正确位置是什么?

java - PropertyOverrideConfigurer 和 PropertyPlaceholderConfigurer 有什么区别?

java - 如何@Autowire隐藏在ProxyFactoryBean后面的bean?

java - while循环中的多个条件

java - Spring Autowiring 不适用于安全配置

java - 无法为 applicationContext.xml 中的给定键提供 HashMap 作为 "value"的问题

java - Java 中 Gurobi 优化器的 UnsatisfiedLinkError

Java EE 简单登录

java - EJB - 如何将复杂对象传输到表示层?