在Symfony2中反序列化或解析XML响应


Deserializing or parse XML response in Symfony2

我正在通过cURL调用一个API方法,我得到了这个响应:

<?xml version="1.0" encoding="UTF-8"?>
<jobInfo
    xmlns="http://www.force.com/2009/06/asyncapi/dataload">
    <id>75080000002s5siAAA</id>
    <operation>query</operation>
    <object>User</object>
    <createdById>00580000008ReolAAC</createdById>
    <createdDate>2015-06-23T13:03:01.000Z</createdDate>
    <systemModstamp>2015-06-23T13:03:01.000Z</systemModstamp>
    <state>Open</state>
    <concurrencyMode>Parallel</concurrencyMode>
    <contentType>CSV</contentType>
    <numberBatchesQueued>0</numberBatchesQueued>
    <numberBatchesInProgress>0</numberBatchesInProgress>
    <numberBatchesCompleted>0</numberBatchesCompleted>
    <numberBatchesFailed>0</numberBatchesFailed>
    <numberBatchesTotal>0</numberBatchesTotal>
    <numberRecordsProcessed>0</numberRecordsProcessed>
    <numberRetries>0</numberRetries>
    <apiVersion>34.0</apiVersion>
    <numberRecordsFailed>0</numberRecordsFailed>
    <totalProcessingTime>0</totalProcessingTime>
    <apiActiveProcessingTime>0</apiActiveProcessingTime>
    <apexProcessingTime>0</apexProcessingTime>
</jobInfo>

我想以一种简单的方式访问|解析结果,但我不知道是应该反序列化XML,还是只是尝试使用一些PHP原生XML函数来读取它。那么关于第一个疑问的想法呢?

如果反序列化XML更好,那么我已经阅读了这篇文章"在Symfony2中使用JMSSerializerBundle反序列化XML",我根本不清楚是否需要一个实体来实现这一点。还有这个其他主题仍然让我困惑。对此有什么建议吗?体验?建议?

这取决于您的意图。如果您想直接将部分或全部XML推送到实体/文档对象中以保存到数据库中,那么JMSSerializerBundle可以非常巧妙地做到这一点,而且绝对是最好的方法

但是,如果您只想从xml中提取一个或两个字段,并在其他业务逻辑中使用它们,那么简单地将xml加载到SimpleXML对象中通常会更简单。

您可以使用任何对象(而不仅仅是实体)将XML文件反序列化到。建议反序列化到对象,因为您可能希望以OOP方式使用它。

这是一篇关于JMS序列化程序(bundle)的博客,其中包括一个用户对象中的XML反序列化示例:http://johnkary.net/blog/deserializing-xml-with-jms-serializer-bundle/