我試圖解析來自Archive.org搜索功能的數據。數據是這樣的:使用PHP和SimpleXML解析XML,其中項目的名稱爲<long>,<float>或<int>
<doc>
<float name="avg_rating">5.0</float>
<arr name="collection"><str>U-Melt</str><str>etree</str></arr>
<arr name="format"><str>Checksums</str><str>Flac</str><str>Flac FingerPrint</str>
<str>Metadata</str><str>Ogg Vorbis</str><str>Text</str><str>VBR M3U</str>
<str>VBR MP3</str><str>VBR ZIP</str></arr>
<str name="identifier">umelt2009-09-19.main.km184.flac16</str>
<str name="mediatype">etree</str>
<int name="num_reviews">1</int>
</doc>
這裏有一個link to the full XML。
PHP的SimpleXML可以很好地讀取每個文檔,並且可以讀取標記爲str和arr的項目。這是標記爲float,int或long的項目,它嚇壞了,我不明白爲什麼。
我的解析代碼如下:
/* OPENING FILE */
$xml = simplexml_load_file($pathname.$identifier_list);
//Check the file to make sure it's got XML in it
$xmlCheck = file_get_contents($pathname.$identifier_list);
$xmlCheck = substr($xmlCheck,0,4);
if (!$xmlCheck == "<?xm") {
die("<p>WARNING: ".$filename." doesn't looks like XML, quitting. Check it to see what's wrong.");
}
else {
$result = $xml->result;
echo "<br/><br/>".$result['name']."<br/>";
$counter = 1;
foreach ($result->doc as $doc) {
echo "<br/><b>Document ".$counter."</b>";
$counter++;
foreach ($doc->children() as $item) {
echo $item->getName();
switch ((string) $item['name']) {
case 'identifier':
echo "<br/>Identifier: ".$item."\n";
break;
case 'licenseurl':
echo "<br/>License URL: ".$item."\n";
break;
case 'mediatype':
echo "<br/>Mediatype: ".$item."\n";
break;
case 'downloads':
echo "<br/>Downloads: ".$item."\n";
break;
case 'avg_rating':
echo "<br/>Average Rating: ".$item."\n";
break;
case 'collection':
echo "<br/>Collection: ".$item."\n";
break;
}
}
echo "<br/>";
}
}
我已經嘗試使用 - >兒童() - > doc和 - >長或 - > int類型。這些似乎都沒有拿起long/int/float項目。我開始認爲這是因爲它們是原始的,但我不知道如何解決這個問題。
在此先感謝您的幫助。
是否有涉及的命名空間?你能發佈完整的XML嗎? – 2009-09-27 19:15:11
鏈接添加到完整的XML。 – 2009-09-27 19:25:18