反序列化嵌套的xml节点

时间:2016-09-28 17:45:51

标签: php symfony jms-serializer

我从api获得了一个xml响应,格式如下:

<?xml version='1.0' encoding='UTF-8'?>
<response success="true">
    <messages>
        <message type="WARNING" key="warning-unpublished-changes" values="" parentId="1">
            You have unpublished changes. Your changes will not be visible every where until it is published.</message>
    </messages>
    <output>
        <accounts>
            <account 
                id="1" 
                code="AssetsChild" 
                name="AssetsChild" 
                description="Total Assets Child"
                displayAs="CURRENCY"
                accountTypeCode="A"
                decimalPrecision="0"
                isAssumption="0"
                suppressZeroes="1"
                isDefaultRoot="1"
                shortName=""
                exchangeRateType="E"
                balanceType="DEBIT"
                formula=""
                isLinked="0"
                owningSheetId=""
                isSystem="0"
                isIntercompany="0"
                dataEntryType=""
                planBy="DELTA"
                timeRollup="LAST"
                timeWeightAcctId=""
                levelDimRollup="SUM"
                levelDimWeightAcctId=""
                rollupText=""
                startExpanded="1"
                hasSalaryDetail=""
                dataPrivacy="PRIVATE"
                isBreakbackEligible=""
                subType="CUMULATIVE"
                enableActuals="1"
                isGroup="0"
            />
        </accounts>
    </output>
</response>

我希望将它反序列化为定义为的响应对象:

class Response 
{
    protected $success;
    protected $messages;
    protected $accounts;
}

我已经能够使用下面的配置成功获取成功值和消息数组。是否可以使用帐户节点列表获取水合物帐户属性?

Response\AccountResponse:
  xml_root_name: response
  properties:
    success:
      type: boolean
      xml_attribute: true
      xml_value: false

    messages:
      type: array<Entity\Message>
      xml_list:
        entry_name: message

1 个答案:

答案 0 :(得分:1)

使用SimpleXml。具体来说,使用simple_xml_load_string将字符串转换为SimpleXmlElement,使用类方法navigate and extract the data