2017-02-21 10 views
0

Я веселюсь со странным ответ XML я получаю - в 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 

и

Кроме того, это очень странная конструкция

Params{paramList=[Param{value={array={data={value={string=xxx}}}}, array=null, data=null} 
... 

Как бы я правильно настроить POJO для этого XML в идеале быть в состоянии сделать

res.getUstId1(); 
+0

В вашем примере * XML * есть и незакрытые * * тег на линии позапрошлом. Это часть файла или ошибка в файле? –

+0

Извините, скопируйте/вставьте ошибку, есть много таких тегов ... – Michael

ответ

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> 

Fiddle: http://xsltransform.net/ejivdHU

+0

Я никогда не делал этого раньше, но это выглядит интересно. Можете ли вы объяснить, как использовать это в java? – Michael

+0

В основном вы преобразовываете XML в другую структуру. Вам нужно будет запустить его в ответ от налогового органа, прежде чем разбирать его в объекты. Я не уверен, как выглядит ваш стек, поэтому, возможно, эти ответы помогут вам: http://stackoverflow.com/questions/4604497/xslt-processing-with-java – fafl

 Смежные вопросы

  • Нет связанных вопросов^_^