这是我的XML文件
<?xml version="1.0" encoding="UTF-8"?>
<searchresult>
<query>file</query>
<page-number>3</page-number>
<start>20</start>
<files-per-page>10</files-per-page>
<files-approx-count>6361998</files-approx-count>
<result-files>
<file>
<name>file 1</name>
<description>
descrp
</description>
<url>
http://www.example.com
</url>
</file>
<file>
<name>file 2</name>
<description>
descrp 2
</description>
<url>
http://www.example.com
</url>
</file>
</result-files>
</search-result>
我尝试了以下代码
$xml = simplexml_load_file("file.xml");
foreach ($xml as $xmls):
$name =$xmls->name;
$url =$xmls->url;
echo $name.$url;
endforeach;
但没有输出请帮助。
答案 0 :(得分:3)
首先,您的XML文件格式不正确。根标记为<searchresult>
,而最后一个标记为</search-result>
。这会导致解析错误。
第二件事,如果您的标签包含破折号,那么这些标签不能直接用作 SimpleXML 的变量,在这种情况下,您应该使用特殊语法(请参阅:php simplexml_load_file with a dash ( - ))。解决此问题的其他方法是,如果您控制de XML语法,请更改XML的编写方式,并且不要在标记上使用短划线。
最后,我想您要在result-files
标记内打印出文件信息。
$xml = simplexml_load_file("file.xml");
foreach ($xml->{'result-files'}->file as $file) {
printFile($file);
}
function printFile($file) {
$name = trim($file->name);
$url = trim($file->url);
print "$name $url\n";
}
输出:
file 1 http://www.example.com
file 2 http://www.example.com
你已经完成了。
答案 1 :(得分:0)
使用simplexml_load_file
时,您正在创建对象。该对象不一定是可迭代的 - 但它可以通过标记名称进行索引。尽量不要使用foreach(...)
,而只使用echo $xml->name;
。如果这不起作用,那么也许你正在查找文件的错误目录。您可能需要执行以下操作:
已编辑提供与提交的XML文件相匹配
$path = $_SERVER['DOCUMENT_ROOT']."/file.xml";
$xml = simplexml_load_file($path);
echo $xml->start; //should output 20