【问题标题】:simplexml parse xml only versionsimplexml 解析 xml 唯一版本
【发布时间】:2016-05-19 16:46:50
【问题描述】:

我必须将自动生成的 XML 文件解析为 PHP,但没有成功。

我正在获取一个包含 XML 文件的文件夹,并且必须解析每个文件。奇怪的是,我只得到版本作为输出。

我的代码:

$xml_folder = "/var/www/sitename/xml_folder/";
$xml_files  = scandir($xml_folder);
$xml_files  = array_diff($xml_files, array('.', '..'));

foreach($xml_files as $file) {
    $xml_file = $xml_folder . $file;
    $xml = simplexml_load_file($xmlfile);
    print_r($xml);
}

现在,我的输出如下所示:

XML 看起来像一个正常生成的 XML,这里是它的截图预览:

当然,它不是结构化的,但任何浏览器都可以处理它并创建一个有效的结构。

结构对simplexml 重要吗? 我尝试了很多变体来使其工作(即使使用simplexml_load_string),但没有什么是行不通的。

【问题讨论】:

  • 我猜它工作正常。试试这个:echo htmlentities( print_r( $xml, 1 ) );。您的浏览器只是不显示 XML 标记。尝试在您的页面上查看源代码,您会看到所有内容(我希望如此)。
  • 只是猜测,但您的问题可能不是 XML,而是使用 print_r 函数。我看不出有任何理由期望 print_r 输出实际的 XML。
  • 嗯,看起来不像是因为print_r()。使用echo htmlentities(print_r($xml,1));,它的输出与屏幕截图中的相同。

标签: php xml parsing simplexml


【解决方案1】:

您永远不应该将print_r 用于 XML,它不能很好地用于 xml。
相反,您可以使用它来显示 xml 结构

echo $xml->asXML();

查看来自SimpleXML and print_r() - why is this empty?的答案

不要使用 print_r() 或 var_dump() 来检查 SimpleXMLElement,它们 不一定对它们起作用,因为 SimpleXML 使用了很多魔法 在幕后。相反,看看什么 asXML() 返回。

【讨论】:

  • 效果很好,但我如何循环到$xml->asXML() 的输出?如果我 print_r() $xml->asx 之类的东西(就像我的屏幕截图一样),我只会收到错误 Trying to get property of non-object。我的目标是将整个 XML 变成一个 PHP 数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-14
  • 1970-01-01
  • 1970-01-01
  • 2013-08-26
相关资源
最近更新 更多