gpt4 book ai didi

java - 将 XML 映射到与 XML 结构不匹配的 Java 对象

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

我从对遗留系统的调用中获得了一个平面 XML 文档,我希望能够使用注释将它解码为多个 Java 对象(理想情况下)。

XML 没有 xsd,我想维护我的 Java 类的当前结构,因为它们映射到我从我的 restful 服务返回的 JSON 的结构。

我已经看到使用 MOXy 反向解决此问题的示例,但没有确切的示例。

所以给...

    <xml>
<body>
<a>A</a>
<b>B</b>
<c>C</c>
<d>D</d>
<e>E</e>
</body>
</xml>

我想将这些值映射到

    public class wrapper {

private Object1 one;
private Object2 two;
private Object3 thr;
}

public class Object1 {

private String a;
private String b;

}

public class Object2 {

private String c;
private String d;
}

public class Object3 {

private String e;
}

这样做的明显的长期方法是手动解析 XML 文档,检索文本节点值并将它们设置在我的 java 对象上,但我试图避免这种情况,因为 XML 相当大,我将不得不对多个服务重复该过程。

任何需要大量手动处理的解决方案都会让我很难证明偏离当前的手工方法是合理的。

提前致谢

最佳答案

相关 MOXy 功能

MOXy 目前支持使用 @XmlPath(".") 将子对象的映射属性直接写入父对象元素(参见:http://blog.bdoughan.com/2010/07/xpath-based-mapping.html)。

您的用例有什么有趣的地方

使您的用例变得棘手的是您在示例中添加了一层嵌套。我们今天不直接支持这个,但我已经添加了一个增强请求(参见:http://bugs.eclipse.org/432029)。实现后,您将能够执行以下操作:

@XmlRootElement(name="xml")
@XmlAccessorType(XmlAccessType.FIELD)
public class wrapper {

@XmlPath("body")
private Object1 one;

@XmlPath("body")
private Object2 two;

@XmlPath("body")
private Object3 thr;

}

变通

使用当前功能,您可以执行以下操作:

Java 模型

@XmlRootElement(name="body")
@XmlAccessorType(XmlAccessType.FIELD)
public class wrapper {

@XmlPath(".")
private Object1 one;

@XmlPath(".")
private Object2 two;

@XmlPath(".")
private Object3 thr;

}

演示

import javax.xml.bind.*;
import javax.xml.stream.*;
import javax.xml.transform.stream.StreamSource;

public class Demo {

public static void main(String[] args) throws Exception {
XMLInputFactory xif = XMLInputFactory.newFactory();
StreamSource source = new StreamSource("input.xml");
XMLStreamReader xsr = xif.createXMLStreamReader(source);
while(!(xsr.isStartElement() && "body".equals(xsr.getLocalName()))) {
xsr.next();
}

JAXBContext jc = JAXBContext.newInstance(wrapper.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
wrapper result = (wrapper) unmarshaller.unmarshal(xsr);
}

}

了解更多信息

关于java - 将 XML 映射到与 XML 结构不匹配的 Java 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22790094/

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