解析对可用对象

时间:2017-02-21 08:51:44

标签: java xml jackson

我很开心我得到了一个奇怪的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();

1 个答案:

答案 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>

小提琴:http://xsltransform.net/ejivdHU