【问题标题】:Using SimpleXML to loop through muliple entries使用 SimpleXML 循环多个条目
【发布时间】:2010-08-18 11:09:03
【问题描述】:

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

<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 文档中一遍又一遍地循环,但其中的数据发生了变化。我想要做的是将某些成员的所有数据输入到 sql 数据库中。所以理想情况下,我想在数据库中的一行中输入这一切。 xml 提要包含不同的成员类型,例如“完整”或“关联”。

目前我正在尝试遍历所有正式成员,并获取该特定成员的所有数据。每个成员的数据分为三个部分,每个部分都有一个单独的成员标签,所以上面的 Ted Bloggs 有三个成员标签中的数据,其中 Datatype 是 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)的所有数据放入数据库中的一行。

【问题讨论】:

    标签: php xml simplexml


    【解决方案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 ...除了问题之外什么都没有,也没有时间整理它们。不过,这似乎对我有用。

    兄弟, 保罗·皮伦

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-16
      • 2015-10-22
      • 2023-03-26
      • 2013-11-02
      • 1970-01-01
      • 1970-01-01
      • 2023-01-03
      相关资源
      最近更新 更多