如何回显PHP SimpleXMLElement

时间:2014-06-20 12:11:58

标签: php simplexml

我正在学习PHP中的SimpleXML。然后我用SimpleXMLElement(...)进行简单的测试,我什么也得不回来。让我解释。这是XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<movies>
 <movie>
  <title>PHP: Behind the Parser</title>
  <plot>
   So, this language. It's like, a programming language. Or is it a
   scripting language? All is revealed in this thrilling horror spoof
   of a documentary.
  </plot>
  <great-lines>
   <line>PHP solves all my web problems</line>
  </great-lines>
  <rating type="thumbs">7</rating>
  <rating type="stars">5</rating>
 </movie>
</movies>

这是我的php文件:

<?php
$xml = simplexml_load_file('example.xml');
echo $xml->getName() . "<br>"; // prints "movies"

$movies = new SimpleXMLElement($xml);
echo $movies->getName() . "...<br>"; // doesnt print anything, not event dots

echo $movies->movie[0]->plot; // even this does not print anything
?>

仅输出:

movies

请阅读php文件中的评论。我试图在加载文件后和完成新的simpleXML对象后以完全相同的方式打印xml元素。一些如何只打印第一个echo命令结果。我搜索了许多例子,但无法使其发挥作用。哪里出错了?这对我来说是个大难题,但也许对你来说很小。

4 个答案:

答案 0 :(得分:2)

simplexml_load_file已经返回了SimpleXMLElement对象。试试这个:

<?php
$xml = simplexml_load_file('example.xml');

echo $xml->getName() . "<br>";
echo $xml->movie[0]->plot . "<br>\n";
?>

答案 1 :(得分:1)

更改此行:

$movies = new SimpleXMLElement($xml);

到此:

$movies = new SimpleXMLElement($xml->asXML());

答案 2 :(得分:0)

试试这个

<?php
$movies = simplexml_load_file('sample.xml');

foreach($movies as $key=>$val)
{
        echo $val->title.'<br>';
        echo $val->plot.'<br>';
        echo $val->rating[0];
        echo $val->rating[1];
}

?>

答案 3 :(得分:0)

您尝试做的事情没有多大意义,因为您尝试加载相同的XML两次:

// this loads the XML from a file, giving you a SimpleXMLElement object:
$xml = simplexml_load_file('example.xml');
// this line would do what? load the XML from the XML?
$movies = new SimpleXMLElement($xml);

在SimpleXML扩展中有两个加载XML的函数,它们都返回SimpleXMLElement对象:

  • simplexml_load_file - 获取文件名,并在该文件中加载XML;使用正确的PHP设置,您也可以为其提供一个URL,它将直接从那里加载XML
  • simplexml_load_string - 获取您已经从其他地方获得的XML字符串,然后加载

获得SimpleXMLElement的第三种方式是调用the class's constructor(即撰写new SimpleXMLElement)。这实际上可以像上面这样做:默认情况下,它需要一个XML字符串(如simplexml_load_string),但您也可以将第三个参数设置为true,以表明它是一个路径或URL (如simplexml_load_file)。

所有这三种方法的结果完全相同,它们只是根据您当前所拥有的不同方式(以及在某种程度上,您希望代码的外观)。

作为旁注,还有两个函数获取您已经解析过的XML对象:simplexml_import_domdom_import_simplexml。这些实际上非常酷,因为the DOM是一种标准的,全面的,但相当繁琐冗长的XML行为方式,而SimpleXML很简单 - 使用这些函数你可以实际使用这两种函数因为它们只是更改对象的包装而不必重新解析基础XML。