这是我的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;
但没有输出,请帮忙。
首先,您的XML文件格式不正确。根标记是<searchresult>
,而最后一个标记是</search-result>
。这会导致分析错误。
第二件事是,如果您的标记包含破折号,则这些标记不能直接用作SimpleXML的变量,在这种情况下,您应该使用特殊语法(请参阅:带破折号(-)的php SimpleXML_load_file)。解决这个问题的另一种方法是,如果您控制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
你完了。
使用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