我正在尝试将XML解析为Java类,然后将其发送到前端。 我正在使用Springboot 2.2.5,Jackson数据格式xml 2.10.2
我有以下XML文件:
<root xmlsn="...">
<result status="1" outs="6" val="0" pic="7"/>
</root>
我希望前端的后端对此响应:
{
status: 1,
outs: 6,
val: 0
pic: 7
}
嗯,这很容易。
让我们看看我拥有什么:
根元素的类:
@JacksonXmlRootElement(namespace = "...", localName = "root")
public class SetXmlResponseDto {
@JacksonXmlProperty(localName = "result")
private ResultPropertyDto result;
}
然后对结果元素ResultPropertyDto进行分类:
public class ResultPropertyDto {
@JacksonXmlProperty(localName = "val", isAttribute = true)
private String value;
@JacksonXmlProperty(localName = "status", isAttribute = true)
private String status;
}
///我删除了一些代码,以确保酿造性(setter,getter)
但是结果如下:
{
result: {
status: 1,
....
}
}
也提一下我是如何建造它的呢?
ObjectMapper objectMapper = new XmlMapper();
objectMapper().readValue(new URL(urlAddress), SetXmlResponseDto.class);
当然,我可以在将SetXmlResponseDto.getStatus()
发送到前端之前调用它,然后输出将完全符合预期,但是我想知道是否有一种方法可以在不创建子类{{ 1}} ??
想象一下,在XML中有4次嵌套元素,并且只想映射此嵌套元素的1个属性。我将为此创建4个类?
感谢您的回答
答案 0 :(得分:0)
如果您想避免创建深层嵌套的结构,则可以始终使用xpath。
从上述文档参考中:
考虑以下的widget.xml文件
<widgets>
<widget>
<manufacturer/>
<dimensions/>
</widget>
可以使用以下XPath API选择元素 代码:
// parse the XML as a W3C Document
DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document document = builder.parse(new File("/widgets.xml"));
XPath xpath = XPathFactory.newInstance().newXPath();
String expression = "/widgets/widget";
Node widgetNode = (Node) xpath.evaluate(expression, document, XPathConstants.NODE);
通过引用元素,可以得到一个相对的XPath表达式 现在可以编写以选择子元素:
XPath xpath = XPathFactory.newInstance().newXPath();
String expression = "manufacturer";
Node manufacturerNode = (Node) xpath.evaluate(expression, widgetNode, XPathConstants.NODE);