gpt4 book ai didi

java - 如何将单个标记映射到 JAXB 中的多个字段

转载 作者:行者123 更新时间:2023-11-30 11:23:22 24 4
gpt4 key购买 nike

是否有可能在 JAXB 中实现以下目标

 msg.txt

<Message>
<abc>Hello World</abc>
<cdf>Dummy</cdf>
</Message>

@XmlRootElement(name="message")
class Message{

public String abc;
public String cdf;
}

class Test{
public static void main(String args[]){
JAXBContext jc = JAXBContext.newInstance();
Unmarshaller u = jc.createUnmarshaller();
Message m = (Message) u.unmarshal(new File("C:/msg.txt"));
}
}

现在,我想用 abc = 'Hello World' 和 cdf = 'Hello' 填充 Message 对象。也就是说,abc 字段的子字符串。

我尝试将 XMLJavaAdapter 用于 cdf 字段,但在 Adapter 类的解码方法中我只能将字符串虚拟作为 ValueType,即 cdf 字段的值。

这在 JAXB 中可行吗?

最佳答案

您可以映射 abc,然后将 cdf 标记为 @XmlTransient(以防止它被填充为 unmarshal 的一部分

@XmlRootElement(name="message")
class Message{

public String abc;

@XmlTransient
public String cdf;
}

然后您可以在解码完成后利用解码事件填充 cdf 字段。以下是执行此操作的 2 种不同方法的链接:

  1. http://docs.oracle.com/javase/7/docs/api/javax/xml/bind/Unmarshaller.Listener.html
  2. http://docs.oracle.com/javase/7/docs/api/javax/xml/bind/Unmarshaller.html#unmarshalEventCallback

对您的演示代码的更正

创建 JAXBContext 时需要包含 Message 类:

 JAXBContext jc = JAXBContext.newInstance(Message.class);

您还需要确保在 @XmlRootElement 注释中指定的名称与 XML 文档中的根元素名称相匹配。目前,您使用的大小写不匹配。

关于java - 如何将单个标记映射到 JAXB 中的多个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21240994/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com