0

ルート要素に複数の配列がある xml ファイルがあります。Implicitcollection 宣言を使用しようとすると、xstream は最後の宣言のみを処理し、それ以外はすべて null のままです。以下のコードでは、最初の配列 ERRORS は null のままですが、DEBITS は解析されます。

public class XMLParser {

    /**
     * @param args
     * @throws Exception 
     */
    public static void main(String[] args){
        String xmlString = "<DebitsWSDS xmlns=\"\"> " + 
                                 "  <DEBITS> " + 
                                 "    <DEBIT_ID>-1</DEBIT_ID> " + 
                                 "  </DEBITS> " + 
                                 "  <DEBITS> " + 
                                 "    <DEBIT_ID>-2</DEBIT_ID> " + 
                                 "  </DEBITS> " + 
                                 "  <ERRORS> " + 
                                 "    <ERROR_ID>1</ERROR_ID> " + 
                                 "  </ERRORS> " + 
                                 "  <ERRORS> " + 
                                 "    <ERROR_ID>2</ERROR_ID> " + 
                                 "  </ERRORS> " + 
                            "</DebitsWSDS> ";
        DebitsWSDS debitsWSDS;
        try {
            debitsWSDS = convertFeesSetXMLResultToDebitsWSDS(xmlString);
            System.out.println(debitsWSDS.ERRORS==null);
            System.out.println(debitsWSDS.DEBITS==null);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


    }


private static DebitsWSDS convertFeesSetXMLResultToDebitsWSDS(String xml) throws Exception{

        XStream xstream = new XStream(new StaxDriver());
            xstream.alias("DebitsWSDS", DebitsWSDS.class);
        xstream.addImplicitCollection(DebitsWSDS.class, "DEBITS");
        xstream.addImplicitCollection(DebitsWSDS.class, "ERRORS");
        xstream.alias("ERROR_ID", String.class);
        //System.out.println(xml);
        DebitsWSDS debitsWSDS =(DebitsWSDS)xstream.fromXML(xml);
        return debitsWSDS;
    }

}




public class DebitsWSDS {

        public List<ERROR> ERRORS;
        public List<DEBIT> DEBITS;

    public class ERROR {
        public String ERROR_ID;
    }

    public class DEBIT {
        public String DEBIT_ID;
    }

}
4

1 に答える 1

0

あなたが何を期待しているのかよくわかりません。XStream は Bean/XML マッピング ツールであり、事実上、2 つの XML リストがListBean 内の同じ要素にマップされます。その XML 構造が本当に必要な場合は、SAX パーサーなどを使用して Bean を作成し、空のリストを作成して、パーサー コールバックをそのリストに追加します。

于 2012-12-11T09:49:06.670 に答える