1
你好,我成功創建了我的解析器 除了一件事情之外,一切都很好,因爲我的XML被格式化了一些不同,我完全失去了如何爲<photos>
的子項指定變量。用php解析xml,子女
你好,我成功創建了我的解析器 除了一件事情之外,一切都很好,因爲我的XML被格式化了一些不同,我完全失去了如何爲<photos>
的子項指定變量。用php解析xml,子女
我認爲將XML數據解析爲像結構樹一樣會很有幫助。我這樣做是爲了你,看看這裏:
<?php
$data = '
<item>
<url />
<name />
<photos>
<photo>1020944_0.jpg</photo>
<photo>1020944_1.jpg</photo>
<photo>1020944_2.jpg</photo>
</photos>
<user_id />
</item>';
$tree = array();
$stack = array(&$tree);
function startElement($parser, $name, $attrs) {
global $stack;
$t = &$stack[ count($stack) - 1 ];
$t[ $name ][] = array();
$n = count($t[ $name ]);
array_push($stack, &$t[ $name ][ $n - 1 ]);
}
function endElement($parser, $name) {
global $stack;
array_pop($stack);
}
function characterData($parser, $data) {
global $stack;
$t = &$stack[ count($stack) - 1 ];
$t[ '#CDATA' ] = trim($data);
}
$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
xml_parse($xml_parser, $data, TRUE);
foreach($tree[ 'ITEM' ][ 0 ][ 'PHOTOS' ][ 0 ][ 'PHOTO' ] as $photo) {
echo "{$photo[ '#CDATA' ]}\n";
}
?>
其實,我有(業餘)重新實現什麼樣的SimpleXML已經給你:
<?php
$xml = new SimpleXMLElement($data);
foreach($xml->photos->photo as $photo) {
echo "$photo\n";
}
?>
+/- 0,最好的解決方案是使用SimpleXML庫,自己解析它是不必要的(除非XML非常大(> 10MB)並且它很糟糕保持這樣的解決方案。 – dbemerlin 2010-06-07 10:50:48
我不知道你的代碼是應該做的,你的問題是什麼。你想讀取給定的XML結構並將相應的信息存儲在數據庫表中,對嗎?我注意到你連接字符串$ photos中的字符數據,但從未使用過。這是你的問題是關於什麼? – mkluwe 2010-06-07 08:14:27
yes確實.......... – 2010-06-07 09:58:49