如何使用PHP读取字符串中的XML子节点值?

时间:2018-09-22 10:03:58

标签: php xml simplexml

我有一个String,它可以从其他服务器动态获取其值。字符串的值为

$xmloutput = '<response uri="/crm/private/xml/Leads/getRecordById">
    <result>
        <Leads>
            <row no="1">
                <FL val="LEADID">131</FL>
                <FL val="SMOWNERID">20001</FL>
                <FL val="Lead Owner"><![CDATA[Aaron]]></FL>
                <FL val="First Name"><![CDATA[Carol]]></FL>
                <FL val="Last Name"><![CDATA[Custer]]></FL>
                <FL val="Email"><![CDATA[good51@gmail.com]]></FL>
            </row>
            <row no="2">
                <FL val="LEADID">2070</FL>
                <FL val="SMOWNERID">20001</FL>
                <FL val="Lead Owner"><![CDATA[Aaron]]></FL>
                <FL val="Last Name"><![CDATA[Florence, SC]]></FL>
            </row>
        </Leads>
    </result>
</response>

我的问题是,通常我们使用$xml = simplexml_load_file("test1.xml");来加载XML文件,但是在我的要求中,它是一个字符串,我如何读取此字符串值并提取子节点及其值?示例:

<FL val="LEADID">131</FL> // its key is LEADID and value is 131
<FL val="First Name"><![CDATA[Carol]]></FL> // its key is First Name and value is Carol

有没有办法将其放入数组?以便我轻松打印出其节点值?

1 个答案:

答案 0 :(得分:2)

使用simplexml_load_string()来从字符串中读取xml。然后循环遍历row元素,然后循环遍历FL元素,然后获取文本内容和元素属性。

$xml = simplexml_load_string($string); 
foreach ($xml->Leads->row as $row) {
    foreach ($row->FL as $fl) {
        echo "{$fl} => {$fl['val']}<br>";
    }
}