在PHP中解析奇怪的XML

时间:2016-05-30 14:51:38

标签: php xml foreach

我有一个get请求返回以下(奇怪的)XML响应;

我怎样才能将<FL val=..>的每个val作为键,将<FL></FL>中的值作为值?

<?xml version="1.0" encoding="UTF-8" ?>
<response uri=" xml/JobOpenings/getRecords">
<result>
    <JobOpenings>
        <row no="1">
            <FL val="JOBOPENINGID">1001</FL>
            <FL val="Posting Title">
                <![CDATA[Controller]]>
            </FL>
            <FL val="Work Experience">
                <![CDATA[Medior]]>
            </FL>
            <FL val="Vacancy type">
                <![CDATA[Not Fixed]]>
            </FL>
            <FL val="Organisation">
                <![CDATA[Organisation B]]>
            </FL>
        </row>
        <row no="2">
            <FL val="JOBOPENINGID">1002</FL>
            <FL val="Posting Title">
                <![CDATA[Accounting & Reporting manager]]>
            </FL>
            <FL val="Job Opening Status">
                <![CDATA[In-progress]]>
            </FL>
            <FL val="Client Name">
                <![CDATA[MVRDO]]>
            </FL>
            <FL val="Work Experience">
                <![CDATA[Medior]]>
            </FL>
            <FL val="Rate">
                <![CDATA[0]]>
            </FL>
            <FL val="Vacancy type">
                <![CDATA[Fixed]]>
            </FL>
            <FL val="Specialisme">
                <![CDATA[Finance]]>
            </FL>
             <FL val="Organisation">
                <![CDATA[Organisation A]]>
            </FL>
        </row>
    </JobOpenings>
</result>
</response>

我想要的示例输出是一个带

的数组

key =空缺类型,值=不固定

key =组织,价值=组织B

等。

我知道我需要一个双重的预告,如:

    $array=simplexml_load_string($xml);    
    foreach ($array->result->JobOpenings->row as $item){
         foreach($item->children() as $key => $value){

            echo '{$key} : {$value} </br>'; //But what to do here??
         }
    }

上面的代码给出了输出:

FL:不固定

FL:组织B

但我需要FL为<FL val="This">

内的val =值

1 个答案:

答案 0 :(得分:0)

此代码下降到您要求的值。也许,你想要更复杂的查找,但我无法理解你的问题

$doc = simplexml_load_string($xml);

foreach ($doc->result->{0}->JobOpenings->{0}->row as $row)
    foreach($row as $item) {
        if(isset($item['val'])) echo $item['val'] .' ';
        echo $item . "\n"; 
    }

demo