我檢索文件像這樣(從互聯網檔案):在PHP中,如何獲得基於變量的XML屬性?
<files>
<file name="Checkmate-theHumanTouch.gif" source="derivative">
<format>Animated GIF</format>
<original>Checkmate-theHumanTouch.mp4</original>
<md5>72ec7fcf240969921e58eabfb3b9d9df</md5>
<mtime>1274063536</mtime>
<size>377534</size>
<crc32>b2df3fc1</crc32>
<sha1>211a61068db844c44e79a9f71aa9f9d13ff68f1f</sha1>
</file>
<file name="CheckmateTheHumanTouch1961.thumbs/Checkmate-theHumanTouch_000001.jpg" source="derivative">
<format>Thumbnail</format>
<original>Checkmate-theHumanTouch.mp4</original>
<md5>6f6b3f8a779ff09f24ee4cd15d4bacd6</md5>
<mtime>1274063133</mtime>
<size>1169</size>
<crc32>657dc153</crc32>
<sha1>2242516f2dd9fe15c24b86d67f734e5236b05901</sha1>
</file>
</files>
他們可以有任意數量的<file>
s,而我只是在尋找那些縮略圖的人。當我找到他們時,我想增加一個計數器。當我瀏覽整個文件時,我想查找中間的縮略圖並返回name
屬性。
這裏是我到目前爲止有:
//pop previously retrieved XML file into a variable
$elem = new SimpleXMLElement($xml_file);
//establish variable
$i = 0;
// Look through each parent element in the file
foreach ($elem as $file) {
if ($file->format == "Thumbnail"){$i++;}
}
//find the middle thumbnail.
$chosenThumb = ceil(($i/2)-1);
//Gloriously announce the name of the chosen thumbnail.
echo($elem->file[$chosenThumb]['name']);`
最後的回聲不起作用,因爲它不喜歡有一個變量選擇的XML元素。當我硬編碼時它工作正常。你能猜到我是處理XML文件的新手嗎?
編輯:從下面 弗朗西斯·阿維拉的答案整理我的權利了!:
$sxe = simplexml_load_file($url);
$thumbs = $sxe->xpath('/files/file[format="Thumbnail"]');
$n_thumbs = count($thumbs);
$middlethumb = $thumbs[(int) ($n_thumbs/2)];
$happy_string = (string)$middlethumb[name];
echo $happy_string;
嗨,請使用php.net/dom代替...您可以使用simplexml來做到這一點,是的,但是dom具有與真棒API相同的性能。 $ a = $ doc-> getElementsByTagName(「file」); foreach($ a as $ x)if($ x-> hasAttribute(「name」))... – skyline26 2012-04-16 04:24:28
代碼對我來說看起來不錯 - 當你在echo語句中使用$ chosenThumb而不是hard-編碼?我的猜測是,價值是訪問不存在的索引(例如,如果沒有找到縮略圖,它將是-1這是無效的) – TheOx 2012-04-16 04:26:03
@TheOx如果我使用$ chosenThumb,我什麼也得不到回報。根本沒有錯誤信息。如果我硬編碼它,我會得到我正在尋找的確切結果。在這種情況下,如果我將它設置爲[1],我會回來「CheckmateTheHumanTouch1961.thumbs/Checkmate-theHumanTouch_000001.jpg」 – 2012-04-16 04:31:13