使用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
答案 0 :(得分:1)
您的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无法解析,也从 @
中删除了错误抑制运算符 @$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上下文中具有特殊含义,因此您需要将其编码为&
。如果XML是你的,我建议不要手动生成XML代码。