java - 从 xml 生成 xsd 时混合 ="true"

标签 java xml intellij-idea xsd

我正在尝试使用 intelliJ 从现有 XML 文件生成 XSD。但是生成的 xsd 有这个 - 'mixed = "true"' 属性,我不希望它出现,因为最终生成的类(使用 xjc)现在包含其成员作为我不想要的可序列化属性。有谁知道我该如何防止这种情况发生?

XML 文件 -

<?xml version="1.0" encoding="UTF-8"?>
<STEPS>
    <STEP>
        <taskId>1</taskId>
        <dependency>

        </dependency>
        <task>Sample Step</task>
        <techDetail>SVN Script path</techDetail>
        <description>Sample step</description>
        <comments>No commnets</comments>
    </STEP>
    <STEP>
        <taskId>2</taskId>
        <dependency>
            <dependanttaskId>1</dependanttaskId>
        </dependency>
        <task>Second Sample Step</task>
        <techDetail>SVN Script Path Again</techDetail>
        <description>Sample step 2</description>
        <comments>No comments again</comments>
    </STEP>
    <STEP>
        <taskId>3</taskId>
        <dependency>
            <dependanttaskId>1</dependanttaskId>
            <dependanttaskId>2</dependanttaskId>
        </dependency>
        <task>Third Sample Step</task>
        <techDetail>SVN Script Path Again</techDetail>
        <description>Sample step 3</description>
        <comments>No comments again 3</comments>
    </STEP>
</STEPS>

生成的 XSD -

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="task">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:enumeration value="Sample Step"/>
        <xs:enumeration value="Second Sample Step"/>
        <xs:enumeration value="Third Sample Step"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  <xs:element name="comments">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:enumeration value="No commnets"/>
        <xs:enumeration value="No comments again"/>
        <xs:enumeration value="No comments again 3"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  <xs:element name="dependency">
    <xs:complexType mixed="true">
      <xs:sequence>
        <xs:element ref="dependanttaskId" maxOccurs="unbounded" minOccurs="0"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="techDetail">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:enumeration value="SVN Script path"/>
        <xs:enumeration value="SVN Script Path Again"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  <xs:element name="description">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:enumeration value="Sample step"/>
        <xs:enumeration value="Sample step 2"/>
        <xs:enumeration value="Sample step 3"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  <xs:element name="STEP">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="taskId"/>
        <xs:element ref="dependency"/>
        <xs:element ref="task"/>
        <xs:element ref="techDetail"/>
        <xs:element ref="description"/>
        <xs:element ref="comments"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="taskId">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:enumeration value="1"/>
        <xs:enumeration value="2"/>
        <xs:enumeration value="3"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  <xs:element name="dependanttaskId">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:enumeration value="1"/>
        <xs:enumeration value="2"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
  <xs:element name="STEPS">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="STEP" maxOccurs="unbounded" minOccurs="0"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

生成的类 -

//
// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
// 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: 2015.05.14 at 04:02:08 PM IST 
//


package generated;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElementRef;
import javax.xml.bind.annotation.XmlMixed;
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="{}dependanttaskId" maxOccurs="unbounded" minOccurs="0"/>
 *       &lt;/sequence>
 *     &lt;/restriction>
 *   &lt;/complexContent>
 * &lt;/complexType>
 * </pre>
 * 
 * 
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "content"
})
@XmlRootElement(name = "dependency")
public class Dependency {

    @XmlElementRef(name = "dependanttaskId", type = JAXBElement.class, required = false)
    @XmlMixed
    protected List<Serializable> content;

    /**
     * Gets the value of the content property.
     * 
     * <p>
     * This accessor method returns a reference to the live list,
     * not a snapshot. Therefore any modification you make to the
     * returned list will be present inside the JAXB object.
     * This is why there is not a <CODE>set</CODE> method for the content property.
     * 
     * <p>
     * For example, to add a new item, do as follows:
     * <pre>
     *    getContent().add(newItem);
     * </pre>
     * 
     * 
     * <p>
     * Objects of the following type(s) are allowed in the list
     * {@link String }
     * {@link JAXBElement }{@code <}{@link String }{@code >}
     * 
     * 
     */
    public List<Serializable> getContent() {
        if (content == null) {
            content = new ArrayList<Serializable>();
        }
        return this.content;
    }

}

最佳答案

删除 <dependency>``</dependency> 中的空格并将其提及为 <dependency/>

  • mixed=true 当需要在父级的子元素之间允许一些字符时出现,在这种情况下父级是 dependency 。所以我假设 dependency 中存在像空格这样的字符元素。

关于java - 从 xml 生成 xsd 时混合 ="true",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30235215/

相关文章:

java - 是否可以在线程可运行的声明中将文件写入交互式 shell?

c# - XML 序列化不填充数组

java - 在 IntelliJ 中使用 Java 调试器时, "Drop Frame"是什么意思?

intellij-idea - 如何设置 Idea 折叠太长的字符串?

java - 将对象分配给 null 是一种代码味道。考虑重构

Java bigdecimal 或 double

java - 如何通过套接字发送非常大的对象

xml - Coldfusion onCFCRequest 将 XML 的返回类型更改为 WDDX

xml - & 导致 XML 代码错误的符号

intellij-idea - 在IDEA中,Subversion的运行速度非常慢