代码之家  ›  专栏  ›  技术社区  ›  Thufir

XJC生成JAXB类,其中有太多来自XSD的变量

  •  0
  • Thufir  · 技术社区  · 6 年前

    我在下面有一些非常基本的数据。我使用的工作流是从Google工作表导出到 xml

    如何生成 JAXB 使用以下工具合理的类 trang xmllint ,或者,如下所示, xjc

    thufir@dur:~/jaxb$ 
    thufir@dur:~/jaxb$ cat dummy.xml 
    <data>
      <b />
      <c />
      <d />
      <e />
      <f />
      <f />
      <h />
      <i />
    </data>
    
    thufir@dur:~/jaxb$ 
    thufir@dur:~/jaxb$ trang dummy.xml dummy.xsd
    thufir@dur:~/jaxb$ 
    thufir@dur:~/jaxb$ cat dummy.xsd 
    <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
      <xs:element name="data">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="b"/>
            <xs:element ref="c"/>
            <xs:element ref="d"/>
            <xs:element ref="e"/>
            <xs:element maxOccurs="unbounded" ref="f"/>
            <xs:element ref="h"/>
            <xs:element ref="i"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="b">
        <xs:complexType/>
      </xs:element>
      <xs:element name="c">
        <xs:complexType/>
      </xs:element>
      <xs:element name="d">
        <xs:complexType/>
      </xs:element>
      <xs:element name="e">
        <xs:complexType/>
      </xs:element>
      <xs:element name="f">
        <xs:complexType/>
      </xs:element>
      <xs:element name="h">
        <xs:complexType/>
      </xs:element>
      <xs:element name="i">
        <xs:complexType/>
      </xs:element>
    </xs:schema>
    thufir@dur:~/jaxb$ 
    

    我可以创造 jaxb 文件为:

    thufir@dur:~/jaxb$ 
    thufir@dur:~/jaxb$ xjc dummy.xsd 
    parsing a schema...
    compiling a schema...
    generated/B.java
    generated/C.java
    generated/D.java
    generated/Data.java
    generated/E.java
    generated/F.java
    generated/H.java
    generated/I.java
    generated/ObjectFactory.java
    thufir@dur:~/jaxb$ 
    thufir@dur:~/jaxb$ wc -l generated/Data.java 
    246 generated/Data.java
    thufir@dur:~/jaxb$ 
    thufir@dur:~/jaxb$ head generated/Data.java -n 77
    //
    // This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.8-b130911.1802 
    // See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
    // Any modifications to this file will be lost upon recompilation of the source schema. 
    // Generated on: 2019.01.11 at 06:17:29 AM PST 
    //
    
    
    package generated;
    
    import java.util.ArrayList;
    import java.util.List;
    import javax.xml.bind.annotation.XmlAccessType;
    import javax.xml.bind.annotation.XmlAccessorType;
    import javax.xml.bind.annotation.XmlElement;
    import javax.xml.bind.annotation.XmlRootElement;
    import javax.xml.bind.annotation.XmlType;
    
    
    /**
     * <p>Java class for anonymous complex type.
     * 
     * <p>The following schema fragment specifies the expected content contained within this class.
     * 
     * <pre>
     * &lt;complexType>
     *   &lt;complexContent>
     *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
     *       &lt;sequence>
     *         &lt;element ref="{}b"/>
     *         &lt;element ref="{}c"/>
     *         &lt;element ref="{}d"/>
     *         &lt;element ref="{}e"/>
     *         &lt;element ref="{}f" maxOccurs="unbounded"/>
     *         &lt;element ref="{}h"/>
     *         &lt;element ref="{}i"/>
     *       &lt;/sequence>
     *     &lt;/restriction>
     *   &lt;/complexContent>
     * &lt;/complexType>
     * </pre>
     * 
     * 
     */
    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "", propOrder = {
        "b",
        "c",
        "d",
        "e",
        "f",
        "h",
        "i"
    })
    @XmlRootElement(name = "data")
    public class Data {
    
        @XmlElement(required = true)
        protected B b;
        @XmlElement(required = true)
        protected C c;
        @XmlElement(required = true)
        protected D d;
        @XmlElement(required = true)
        protected E e;
        @XmlElement(required = true)
        protected List<F> f;
        @XmlElement(required = true)
        protected H h;
        @XmlElement(required = true)
        protected I i;
    
        /**
         * Gets the value of the b property.
         * 
         * @return
         *     possible object is
    thufir@dur:~/jaxb$ 
    

    首先,有点垃圾。

    是吗 对每个元素有不同的方法?太简单了 CSV 文件,但当它到达 Java .

    哪种方法更明智?因为如果原始文件是一千行,那么我会不寒而栗地想到生成的Java类会是什么样子。

    那么,我该如何修复 xsd

    0 回复  |  直到 6 年前