【问题标题】:How to make class to be parsable by JAXB?如何使类可以被 JAXB 解析?
【发布时间】:2013-06-06 07:52:44
【问题描述】:

您好,我需要使用 JAXB 创建以下 XML,但由于它有很多父子关系,我不想创建那么多类来创建该 XML。 任何人都可以给出我如何在单个类的帮助下制作这个 XML 的想法......

<Info>
    <details>
        <arrange>
            <name>joseph</name>
            <ID>12</ID>
            <Date>2012-03-25T11:23:42+10:00</Date>
            <LatestDate>
                <Start>2012-06-25T09:24:59+10:00</Start>
                <End>2013-06-25T09:24:59+10:00</End>
            </LatestDate>
            <Additional>
                <name>IVR</name>
            </Additional>
        </arrange>
    </details>
</Info>

【问题讨论】:

    标签: java xml-parsing jaxb


    【解决方案1】:

    编写一个 XSD 并使用 JAXB 的 xjc 代码生成器来创建类。

    【讨论】:

      【解决方案2】:

      @XmlElementWrapper 将完成这项工作,您必须编写一个类并使用其包装元素定义每个元素,您可以在此处阅读:JAXB unmarshalling multiple XML elements into single class

      【讨论】:

        【解决方案3】:

        您必须将所需的 JAXB 注释添加到您的类中。

        然后您将能够解析 XML 文件并获取 Java 对象。

        【讨论】:

          【解决方案4】:

          注意:我是EclipseLink JAXB (MOXy) 领导,也是JAXB (JSR-222) 专家组的成员。

          由于您希望使用单个类映射到 XML,您可以使用 MOXy 的 @XmlPath 扩展名(请参阅:http://blog.bdoughan.com/2010/07/xpath-based-mapping.html)。

          信息

          import java.util.Calendar;
          import javax.xml.bind.annotation.*;
          import org.eclipse.persistence.oxm.annotations.XmlPath;
          
          @XmlRootElement(name="Info")
          @XmlAccessorType(XmlAccessType.FIELD)
          public class Info {
          
              @XmlPath("details/arrange/name/text()")
              private String name;
          
              @XmlPath("details/arrange/ID/text()")
              private int id;
          
              @XmlPath("details/arrange/Date/text()")
              private Calendar date;
          
              @XmlPath("details/arrange/LatestDate/Start/text()")
              private Calendar start;
          
              @XmlPath("details/arrange/LatestDate/End/text()")
              private Calendar end;
          
              @XmlPath("details/arrange/Additional/name/text()")
              private String additionalName;
          
          }
          

          jaxb.properties

          要将 MOXy 指定为您的 JAXB 提供程序,您需要在与域模型相同的包中包含一个名为 jaxb.properties 的文件,并使用以下条目(请参阅:http://blog.bdoughan.com/2011/05/specifying-eclipselink-moxy-as-your.html)。

          javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
          

          演示

          import java.io.File;
          import javax.xml.bind.*;
          
          public class Demo {
          
              public static void main(String[] args) throws Exception {
                  JAXBContext jc = JAXBContext.newInstance(Info.class);
          
                  Unmarshaller unmarshaller = jc.createUnmarshaller();
                  File xml = new File("src/forum16956564/input.xml");
                  Info info = (Info) unmarshaller.unmarshal(xml);
          
                  Marshaller marshaller = jc.createMarshaller();
                  marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
                  marshaller.marshal(info, System.out);
              }
          
          }
          

          input.xml/Output

          <?xml version="1.0" encoding="UTF-8"?>
          <Info>
             <details>
                <arrange>
                   <name>joseph</name>
                   <ID>12</ID>
                   <Date>2012-03-25T11:23:42+10:00</Date>
                   <LatestDate>
                      <Start>2012-06-25T09:24:59+10:00</Start>
                      <End>2013-06-25T09:24:59+10:00</End>
                   </LatestDate>
                   <Additional>
                      <name>IVR</name>
                   </Additional>
                </arrange>
             </details>
          </Info>
          

          【讨论】:

            猜你喜欢
            • 2014-07-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-03-18
            • 2014-03-19
            • 2012-12-25
            相关资源
            最近更新 更多