使用SimpleXML循环遍历多个条目

时间:2010-08-18 11:09:04

标签: php xml simplexml

嗨我试图在php中使用simplexml解析xml提要。 xml feed的布局如下:

<Member>
    <MemberType>Full</MemberType>
    <JoinDate>2010-06-12</JoinDate>
    <DataType>A</DataType>
    <Data>
        <FirstName>Ted</FirstName>
        <LasttName>Smith</LasttName>
        <Data1>56</Data1>
        <Data2>100</Data2>
        <Data3>120</Data3>
    </Data>
</Member>
<Member>
    <MemberType>Full</MemberType>
    <JoinDate>2010-06-12</JoinDate>
    <DataType>B</DataType>
    <Data>
        <FirstName>Ted</FirstName>
        <LasttName>Smith</LasttName>
        <Data1>57</Data1>
        <Data2>110</Data2>
        <Data3>130</Data3>
    </Data>
</Member>
<Member>
    <MemberType>Full</MemberType>
    <JoinDate>2010-06-12</JoinDate>
    <DataType>C</DataType>
    <Data>
        <FirstName>Ted</FirstName>
        <LasttName>Smith</LasttName>
        <Data4>58</Data4>
        <Data5>115</Data5>
        <Data6>230</Data6>
    </Data>
</Member>

其中成员元素在xml doc中反复循环,但其中的数据会发生变化。我想要做的是将某些成员的所有数据输入到sql数据库中。所以理想情况下我想在数据库中输入所有这一行。 xml订阅源包含不同的成员类型,例如“完整”或“关联”。

目前我正在尝试遍历所有正式成员,并获取此特定成员的所有数据。每个成员的数据分为三个部分,每个部分都有一个单独的成员标记,因此在Ted Bloggs上面有三个成员标记中的数据,其中数据类型是A,B和C

$PLF = simplexml_load_file('../XML/Members.xml');

foreach ($PLF->Root->xpath('//Member') as $member) {

    if ($member->MemberType == 'Full') {


        echo $member->MemberType.'<br/>';
        echo $member->JoinDate.'<br />';
        echo $member->DataType.'<br/>';
        echo $member->Data->FirstName.'<br/>';
        echo $member->Data->LastName.'<br/>';
        echo $member->Data->Data1.'<br/>';
        echo $member->Data->Data2.'<br/>';
        echo '<br />';


        }}

我目前的代码只能从每个循环中的第一种类型(类型A)中提取数据,我真的想将所有类型A,B和C组合到同一个循环中。所以我可以将像Ted Smith这样的每个成员的所有数据都收集到DB中的一行。

1 个答案:

答案 0 :(得分:1)

我使用简单的xml来读取一些远程文件并通过它们循环。这是我的代码:

         $sUrl      = "some url";
         $sContent  = file_get_contents($sUrl);

        $oXml       = new SimpleXMLElement($sContent);

        $aReturn    = array();

        foreach ($oXml->children() as $oStation)
        {
            $iRackId    = (int)$oStation->rack_id;
            $dLong      = (double)str_replace(",", ".", $oStation->longitute);
            $dLati      = (double)str_replace(",", ".", $oStation->latitude);
            $sDescription = (string)$oStation->description;

            $aRes   = array();
            $aRes['rack_id']        = $iRackId;
            $aRes['longitute']      = $dLong;
            $aRes['latitude']       = $dLati;
            $aRes['description']    = utf8_decode($sDescription);

            if ($dLong > 0 && $dLati > 0)
                $aReturn[$iRackId]  = $aRes;
        }

我所做的是将XML文件的结果放入数组中。稍后在代码中我也将数据保存到数据库中。

希望这对你有所帮助。我不使用xpath ...只有它的问题,没有时间来解决它们。这似乎对我有用。

BR, 保罗佩伦