简单的XML不读取https url字段php:致命错误:在非对象上调用成员函数getName()

时间:2013-09-30 14:41:42

标签: php xml simplexml

使用SimpleXML读取我的xml文件。当我删除我的图像标签时,它会读取信息。我的URL是HTTPS,我想阅读它们。我使用过各种角色逃脱角色但没有成功。

这是简单的xml我疯了: url_xml

<?xml version="1.0" encoding="utf-8"?>
<Image>
<ImageID>https://x.ctrl.com/Image.ashx?Id=e1f47a89-c289-43e1-a2c2-0d35196a97ee&userId=7414</ImageID>
<ImageURL>https://x.ctrl.com/Image.ashx?Id=e1f47a89-c289-43e1-a2c2-0d35196a97ee&userId=7414</ImageURL>
<TempImageURL>https://x.ctrl.com/Image.ashx?Id=e1f47a89-c289-43e1-a2c2-0d35196a97ee&userId=7414</TempImageURL>
</Image>

xml php script

<?php
$xml_source='url_xml.xml';

@$xml=simplexml_load_file($xml_source);
echo $xml->getName() . "<br>";

foreach($xml->children() as $child)
  {
      echo $child->getName() . ": " . $child . "<br>";
   }

?>

PHP错误:

Fatal error: Call to a member function getName() on a non-object in

2 个答案:

答案 0 :(得分:1)

您的XML存在问题,无法转义。

使用 &

逃离 &amp;

喜欢这个

<?xml version="1.0" encoding="utf-8"?>
<Image>
    <ImageID>https://x.ctrl.com/Image.ashx?Id=e1f47a89-c289-43e1-a2c2-0d35196a97ee&amp;userId=7414</ImageID>
    <ImageURL>https://x.ctrl.com/Image.ashx?Id=e1f47a89-c289-43e1-a2c2-0d35196a97ee&amp;userId=7414</ImageURL>
    <TempImageURL>https://x.ctrl.com/Image.ashx?Id=e1f47a89-c289-43e1-a2c2-0d35196a97ee&amp;userId=7414</TempImageURL>
</Image>

因此您的XML无法解析,也从 @ 中删除了错误抑制运算符 @$xml ,只需加载它如$xml=simplexml_load_file($xml_source);所以你可以知道你哪里出错了。

答案 1 :(得分:1)

我有根据的猜测(因为你两次调用getName()而你从错误信息中删除了行号)是错误在这里:

@$xml=simplexml_load_file($xml_source);
echo $xml->getName() . "<br>";

由于simplexml_load_file()只能在失败时返回非对象,我猜这就是发生的事情。您要么没有格式良好的XML文档,要么给定的文件不可读。根据我在谷歌发现的随机XML验证器,这是第一种情况:

  

文件格式不正确
  对实体“userId”的引用必须以';'结尾分隔符。

 .../Image.ashx?Id=e1f47a89-c289-43e1-a2c2-0d35196a97ee&userId=7414</ImageID>
                                                              ^

(您通常可以在Web浏览器中加载XML文件;它会通知您有关错误的信息。)

大多数XML解析器(包括SimpleXML)仅适用于格式良好的数据。

由于&在XML上下文中具有特殊含义,因此您需要将其编码为&amp;。如果XML是你的,我建议不要手动生成XML代码。