- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我必须生成一个 xml 元素,该元素的值可以是任何“原始类型”(xsd:string、xsd:boolean 等)。示例:
<field xsi:type="xsd:string" name="aString">String Value</field>
<field xsi:type="xsd:dateTime" name="aDate">2011-10-21</field>
<field xsi:type="xsd:dateTime" name="aDateTime">2011-10-21T12:00:00</field>
...
所以,我使用这个实现让 JAXB 决定原始类型的 xsi:type
:
public class Field {
@XmlAttribute
private String name;
@XmlElement
Object value;
}
它按预期工作,但所有 java.util.Date 获取类型 xs:dateTime
...
现在我只想在“值”对象是 java.util.Date 的实例时更改编码器的行为,以获取如下字段:
<field xsi:type="xsd:date" name="aDate">2011-10-21</field>
<field xsi:type="xsd:dateTime" name="aDateTime">2011-10-21T12:00:00</field>
所以我创建了一个适配器,但是如果我尝试这样做:
@XmlElement
@XmlJavaTypeAdapter(DateAdapter.class)
Object value;
适配器必须处理 java.lang.Object 类型
public class DateAdapter extends XmlAdapter<String, Object> {...}
但我不想为所有其他对象(Integer、Double 等)松开 JAXB 编码器......
有没有办法为元素的特定子类型设置适配器?
最佳答案
虽然我来自 XSD 并从那里生成类,但我遇到了类似的情况。也就是说,该解决方案也应该适用于您。
在我的例子中,我想在 XSD 模型中扩展一个简单字符串的使用,以便它在 Java 代码中作为 UUID 出现,然后另一个在其他地方作为类出现,等等。 XML端,都是字符串(xs:string),那么java端如何把所有这些字符串分到不同的类型...
我最后做的是,在 XSD 中,我为每种情况创建了简单类型,这里是 UUID 声明:
并在需要时使用它而不是字符串。
然后我创建了一个绑定(bind)文件,我在其中指定了我的 XmlAdaptor,就像你所做的一样,除了现在我有单独的目标,因此可以使用多个专门针对每个 xml“类型”的适配器。
现在,您在这里遇到的另一个困难是,在 Java 端,您的字段表示只是一个对象。我想你一旦知道了类型属性就转换它。也许为每个案例创建一个字段子类,这将允许您更改 typeADaptor 声明。
关于xml - JAXB - 仅为元素的特定子类型设置 XmlAdapter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7900268/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 4 年前。
正如您在 this travis.yml 中看到的那样文件,我的代码依赖于一些第三方库,我在构建项目之前将它们安装在远程系统上。 Travis 每次推送提交时都会下载并构建这些库,这可以避免吗?我的意
我是一名优秀的程序员,十分优秀!