【问题标题】:Android - SimpleXML framework cannot parse @ElementListAndroid - SimpleXML 框架无法解析 @ElementList
【发布时间】:2017-01-26 10:42:38
【问题描述】:

我正在使用 SimpleXML 框架来解析我的 Android 应用程序中的 xml。我无法正确解析 @ElementList

xml片段:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<SaleToPOIResponse>
    <MessageHeader (...) />
    <ReconciliationResponse  ReconciliationType="SaleReconciliation">
        <Response Result="Success"/>
        <TransactionTotals PaymentInstrumentType="Card">
            <PaymentTotals TransactionType="Debit" TransactionCount="182" TransactionAmount="4.17"/>
            <PaymentTotals TransactionType="Credit" TransactionCount="1" TransactionAmount="2.01"/>
        </TransactionTotals>
    </ReconciliationResponse>
</SaleToPOIResponse>

我的班级看起来:

ReconciliationResponseType.java:

 @Root
    @Order(elements = {
            "Response",
            "TransactionTotals"
    })
    public class ReconciliationResponseType {

        @Element(name = "Response", required = true)
        protected ResponseType response;
        @ElementList(name = "TransactionTotals", inline = true, required = false)
        protected List<TransactionTotalsType> transactionTotals;
        @Attribute(name = "ReconciliationType", required = true)
        protected String reconciliationType;

    // getters and setters
    }

TransactionTotalsType.java:

  @Root
    @Order(elements = {
           "PaymentTotals",
           "LoyaltyTotals"
    })
    public class TransactionTotalsType {

        @ElementList(name = "PaymentTotals", inline = true, required = false)
        protected List<PaymentTotalsType> paymentTotals;
        @Attribute(name = "PaymentInstrumentType", required = true)
        protected String paymentInstrumentType;

    // getters and setters
    }

我使用方法解析它:

public static SaleToPOIResponse fromXMLString(String xmlResponse) {
    Reader reader = new StringReader(xmlResponse);

    Serializer serializer = new Persister();
    try {
        SaleToPOIResponse response = serializer.read(SaleToPOIResponse.class, reader, false);
        return response;
    } catch (Exception e) {
        Log.e(TAG, "Exception during parsing String XML to SaleToPOIResponse: ", e);
    }
    return null;
}

但是每次我遇到异常时,都会丢失有序元素“TransactionTotals”,即使 1)它不是必需的 2)它确实存在于解析的 xml 中

org.simpleframework.xml.core.ElementException: Ordered element 'TransactionTotals' missing for class pl.novelpay.epas.generated.saletopoimessages.ReconciliationResponseType

当我从@Order 评论“TransactionTotals”时,xml 会被解析,但结果中的 TransactionTotals 是空的。我在这里想念什么?

【问题讨论】:

    标签: java android xml xml-parsing simple-framework


    【解决方案1】:

    我在这里阅读类似问题的答案时发现了问题: https://sourceforge.net/p/simple/mailman/message/25699359/

    我使用的是name insted of entry。所以 ElementList 属性应该如下所示:

     @ElementList(entry= "PaymentTotals", inline = true, required = false)
     protected List<PaymentTotalsType> paymentTotals;
    

    现在可以完美运行了。

    【讨论】:

      猜你喜欢
      • 2013-08-19
      • 2013-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-06
      • 1970-01-01
      • 2012-05-12
      • 1970-01-01
      相关资源
      最近更新 更多