我很开心我得到了一个奇怪的xml响应 - xml:
<params>
<param>
<value><array><data>
<value><string>UstId_1</string></value>
<value><string>xxx</string></value>
</data></array></value>
</param>
<param>
<value><array><data>
<value><string>ErrorCode</string></value>
<value><string>200</string></value>
</data></array></value>
</param>
</params>
基本上,最内在的<value><string>
构造通常是
<UstId_1>xxx</UstId_1>
和
<ErrorCode>200</ErrorCode>
分别为,以便xml的消息归结为
<params>
<UstId_1>xxx</UstId_1>
<ErrorCode>200</ErrorCode>
</params>
但是这个xml是不同的。它是由税务机关归还的,所以没有办法让它们改变它。
我目前有这个pojo
@JacksonXmlRootElement(localName = "params")
public class Params {
@JacksonXmlProperty(localName = "param")
private List<Param> paramList = new ArrayList<>();
//getter setter ...
}
和Param:
public class Param {
@JacksonXmlProperty(localName = "value")
private Object value;
@JacksonXmlProperty(localName = "array")
private Object array;
@JacksonXmlProperty(localName = "data")
private Object data = new ArrayList<>();
//getter setter....
}
但这仅返回<value><string>
的第二个条目,例如
xxx
和
200
这也是一个非常奇怪的构造
Params{paramList=[Param{value={array={data={value={string=xxx}}}}, array=null, data=null}
...
如何正确地为该xml设置pojo以便理想地能够执行
res.getUstId1();
答案 0 :(得分:3)
也许不是你的目标,但XSLT会帮助你吗?您可以将XML转换为可以轻松解析的内容。像这样:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<params>
<xsl:for-each select="/params/param/value/array/data">
<xsl:element name="{value[1]/string}">
<xsl:value-of select="value[2]/string"/>
</xsl:element>
</xsl:for-each>
</params>
</xsl:template>
</xsl:stylesheet>