Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jaxb将xsd转换为java时删除xsd元素_Java_Xml_Xsd_Jaxb - Fatal编程技术网

使用jaxb将xsd转换为java时删除xsd元素

使用jaxb将xsd转换为java时删除xsd元素,java,xml,xsd,jaxb,Java,Xml,Xsd,Jaxb,我将从xsd生成java代码。我想知道在使用jaxb将xsd转换为java时如何删除xsd元素。我的目标是忽略信息 例: 在这里,您可以看到消息元素被删除。我想知道怎么做?你能修改.xsd吗? 当前元素“note”表示“name”和“message”都是必需的。如果希望“消息”是有条件的,则可能需要添加minOccurs=“0”属性: <xs:element name="note"> <xs:complexType> <xs:sequence>

我将从xsd生成java代码。我想知道在使用jaxb将xsd转换为java时如何删除xsd元素。我的目标是忽略信息

例:

在这里,您可以看到消息元素被删除。我想知道怎么做?

你能修改.xsd吗? 当前元素“note”表示“name”和“message”都是必需的。如果希望“消息”是有条件的,则可能需要添加minOccurs=“0”属性:

<xs:element name="note">
  <xs:complexType>
    <xs:sequence>
      <xs:element type="xs:string" name="name"/>
      <xs:element type="xs:string" name="message" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

如果我理解正确,总结起来,您希望忽略一个强制元素,并且仍然希望结果正确验证。我的简短回答是,这是矛盾的,没有意义。JAXB是为了正确地执行而构建的,而您希望错误地执行它(?)

你有几个选择

  • 使用额外的构造函数参数
  • 改为不生成参数构造函数
  • 不生成,但手工编写JAXB注释类。也许关闭一些验证
  • 不要使用JAXB,使用其他东西(dom4j等)或手工制作xml
  • 可能您可以在绑定文件甚至插件中添加一些重写,但我认为这不值得
我认为这个问题需要更多的背景。您是从xsd生成java代码,还是手工编写?xsd中的名称是XmlElement而不是XmlAttribute。你的目标是什么,是忽略消息吗?更新了问题请检查我仍然不确定问题是什么。你不能通过从不使用setMessage()或getMessage()来忽略它吗?不,因为我正在使用jaxb2值构造函数来生成构造函数,因此它将添加额外的参数,如:Note(字符串名称,字符串消息),但我需要Note(字符串名称);那么不生成构造函数吗?我不能修改xsd,因为我想用它来验证XML。minOccurs=“0”不是解决方案。我试过了,但仍然可以在生成的java文件中看到“message”属性为什么要删除“message”?如果这样做,您将无法验证XML,因为根据您的XSD,所有XML都应该有“message”标记。在我的XML message属性中,将其用于其他用途,因此我无法将其从XSD和XML中删除。但是在这里,生成的java类不应该包含message属性,因为我正在使用jaxb2值构造函数生成构造函数ant,它将添加额外的参数,如:Note(String name,String message),但我需要Note(String name);我的理解是:XSD告诉我们“message”元素是必需的,您希望忽略它,就像它不在XSD中一样。您不能用空字符串调用生成的构造函数来获取消息吗?
        @XmlElement
        protected String name;
<xs:element name="note">
  <xs:complexType>
    <xs:sequence>
      <xs:element type="xs:string" name="name"/>
      <xs:element type="xs:string" name="message" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>