我想在php中处理一个XML文件


I want to process a XML file In php

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