【发布时间】:2013-01-29 22:58:53
【问题描述】:
我正在尝试将 xml 解析的结果推送到多维数组。 XML 的结构是here。 PHP 程序是(不能正常工作):
$xml_url = simplexml_load_file("url to the xml document");
$data = $xml_url->xpath('MULTIPLE/SINGLE/KEY');
$current = 0;
$topics_list = array();
//display list of 'chapters'
foreach($data as $chap_name) {
if ($chap_name['name'] == 'name') {
echo $chap_name->VALUE . '<br />';
$topics_list[$current]['chapter'] = $chap_name->VALUE;
}
}
$data2 = $xml_url->xpath('MULTIPLE/SINGLE/KEY[@name="modules"]/MULTIPLE/SINGLE/KEY');
//display list of 'topics' & 'contents'
foreach($data2 as $topic_name) {
if ($topic_name['name'] == 'name') {
echo $topic_name->VALUE . '<br />';
$topics_list[$current]['topic'] = $topic_name->VALUE;
}
if ($topic_name['name'] == 'description') {
echo $topic_name->VALUE . '<br />';
$topics_list[$current]['content'] = $topic_name->VALUE;
}
}
print_r($topics_list);
我要推送数据的Array的结构是:
Array (
[0] => Array (
[chapter] => Chapter_name1
[name] => Topic_name1
[content] => Content_of_the_topic1
)
[1] => Array (
[chapter] => Chapter_name1
[name] => Topic_name2
[content] => Content_of_the_topic2
)
[2] => Array (
[chapter] => Chapter_name2
[name] => Topic_name2
[content] => Content_of_the_topic2
)
.....
)
更新:这是上述代码处理的结果:
Array(
[0] => Array(
[chapter] => SimpleXMLElement Object
(
[0] => STÖRUNGEN
)
[topic] => SimpleXMLElement Object
(
[0] => 3.25 Starke Blutung
)
[content] => SimpleXMLElement Object
(
[@attributes] => Array
(
[null] => null
)
)
)
)
【问题讨论】:
-
在什么情况下不能正常工作?
-
我没有看到你在任何地方增加
$current。它在整个循环中保持为 0。 -
@Jim 查看我的更新...我只想避免 SimpleXMLElement Object 并将所有数据放入数组中,现在只保存最后一个值
-
@MichaelBerkowski 我是 php 和 xml 解析的新手,你能告诉我,我需要在哪里增加它吗?谢谢
-
将 $chap_name->VALUE 包装在 get_object_vars() 中,看看是否可行。 Michael 的评论是说您将循环遍历 XML 数据,因此您的主题将 Chapter 会改变,但您不会增加 $current,因此每次都会覆盖它。随着章节名称的每次迭代,您需要增加 $current
标签: php arrays xpath simplexml