0

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

但没有输出请帮忙。

4

2 回答 2

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

你完成了。

于 2013-07-01T15:34:40.877 回答
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
于 2013-07-01T15:06:00.640 回答