我想在php中处理XML文件

时间:2013-07-01 15:01:01

标签: php xml

这是我的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;

但没有输出请帮助。

2 个答案:

答案 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