1

我正在使用 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

4

2 回答 2

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);这样您就可以知道哪里出错了。

于 2013-09-30T14:47:38.700 回答
1

我有根据的猜测(因为您两次调用getName()并且您已经从错误消息中删除了行号)是错误在这里:

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

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

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

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

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

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

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

于 2013-09-30T14:53:52.187 回答