嗨我试图在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中的一行。
答案 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, 保罗佩伦