使用简单XML解析XML字符串时丢失标记和数据


Losing tags and data when parsing XML string with Simple XML

我遇到了一个小问题。我正在使用Zoho CRM API,它以如下格式返回我一个XML:

<response uri="/crm/private/xml/Contacts/getRecords">
    <result>
        <Contacts>
            <row no="1">
                <FL val="Contact Owner">
                    <![CDATA[ Kristo Vaher ]]>
                </FL>
                <FL val="Lead Source">
                    <![CDATA[ Partner ]]>
                </FL>
            </row>
        </Contacts>
    </result>
</response>

当我通过simplexml_load_string()创建一个XML对象时,它会在新对象中提供大部分XML,但不会给我FL标记(CDATA元素)的"内部"字符串,即我真正感兴趣的数据。

我的新SimpleXML对象只有以下数据:

[1] => SimpleXMLElement Object
    (
        [@attributes] => Array
            (
                [val] => Contact Owner
            )
    )

我的最佳猜测是,这是因为XML实际上不应该以这种方式构建,我在某个地方读到,如果XML标记具有属性,则不能在其中包含内部内容,反之亦然(这是正确的吗?)。

我的备选方案是什么?自己编写解析器并不是一个真正的选择。

谢谢!

获取属性:

foreach ($value->attributes() as $key => $val){
    // get all attributes
}

获取数据:

echo (string) $load->result->Contacts->row->FL[0];