当前位置: 首页 > 知识库问答 >
问题:

使用JAXB封送器向XML文件添加/修改元素

黎鹤轩
2023-03-14

我正在使用JAXB从XML生成java代码,它有一个枚举

    <xs:simpleType name="color">
    <xs:restriction base="xs:string">
        <xs:enumeration value="Blue"/>
        <xs:enumeration value="Green"/>
        <xs:enumeration value="Yellow"/>
    </xs:restriction>
</xs:simpleType>

我想为这个枚举添加几种颜色,比如红色和白色。我们不想更新xsd或生成的XML/Java代码,因为这些代码不属于我们,我们想要保持原样。

备选案文1.如果有一种读取XSD的方法,当它读取xs:simpleType name=“color”时,我可以为枚举添加颜色,这样生成的java枚举就具有所有需要的值

备选案文2.如果我可以编写一个适配器,它可以帮助我在生成的枚举中添加值

我已经检查了XMLAdapter,但重写它对我的情况没有帮助。由于它是枚举,我发现很难修改它,因为枚举在Java中是常量的

共有1个答案

宰父子安
2023-03-14

由于很难在枚举中插入值,我们使用定制的JAXB绑定将“color”元素从枚举转换为字符串类型。

<jaxb:bindings node="//xs:simpleType[@name='color']">
  <jaxb:typesafeEnumClass map="false" />
</jaxb:bindings>

现在可以插入新值。我们知道这是有风险的,因为现在“color”元素可以接受任何字符串,但从项目的角度来看,它对我们是有效的。

 类似资料:
  • 我有以下问题,当我生成XML文件时,Jaxb给根元素的名称空间添加前缀,我不知道如何跳过它。 我有软件包信息.java文件 我有根元素 结果我得到了 如果没有@XmlNs,它的工作方式也是一样的,将命名空间添加到@XmlRoolElement也没有帮助。它会有什么问题?

  • 问题内容: 我正在将对象编组到XML文件中。如何将注释添加到该XML文件中? 问题答案: 我看不到单独使用JAXB的方法。但是,我认为您可以利用DOM达到预期的效果: 其中jaxbContext是您正在使用的JAXBContext对象,而jaxbObject是要编组的对象。该示例仅将注释附加到文档末尾。对于其他位置,您将不得不遍历doc对象的DOM或使用XPath来查找要添加注释的确切元素,并在其

  • 我正在构建一系列链接类,我希望这些类的实例能够整理成XML,这样我就可以将它们保存到一个文件中,以后再读进去。 目前我使用以下代码作为测试用例: XML输出为: 元素为空有什么原因吗?我希望它包含日期的字符串表示(即)。为了做到这一点,我需要编写一些我自己的代码吗? 的输出是:

  • 我正在尝试解封包含CDATA元素的XML。我得到的字符串仍然有CDATA“包装器”。我使用XJC从XSD创建Java类,它们在包中。我正在使用包含在Oracle(Sun)Java7 JDK中的JAXB。 CDATA包装器为什么会持续存在?在我在这个站点和其他站点上看到的每一个示例中,它们都是在解封过程中被删除的。这肯定是个简单的问题,但我就是看不出来。

  • 我正在使用JAXB解析器将通过http请求发送的XML转换为Java对象,同时根据XSD模式对其进行验证。问题是,当调用unmarshal()方法时,它会引发以下异常: UnMarshalException:意外元素(URI:“http://www.somedomain.com/”,local:“assign”)。所需元素为(无) 如果从根XML元素中删除名称空间,它会引发相同的异常,uri部分为

  • 我有以下JAXB对象: 我使用JAXB编组程序将对象转换为XML: 它运行平稳,没有任何异常,但是,结果总是缺少元素键。我试图将其改为Attribute,但它也不起作用。以下是输出示例: 我曾尝试将键更改为另一个名称,例如AuthKey,但它仍然缺失。我做错了什么? 编辑我发现了问题,这是因为我的键的值是空的。如果它包含值,则将其写入XML。然而,您能解释一下为什么在XMLElement中,我写了