PHP simplexml_load_string不起作用

时间:2012-02-15 08:38:24

标签: php xml

我从XML文件中检索到XML String。我无法使用simplexml_load_file()直接访问该文件。原因是我必须通过Amazon S3 getObject()获得这个。当我echo字符串时,我可以看到输出为真正的XML文件。但是当我尝试使用波纹管代码将其加载到XML对象时,它不起作用。变量$s3Data完全包含给定链接中的XML内容。

$xml = simplexml_load_string($s3Data);

我需要你的帮助来解决这个问题。我得到的XML字符串可以在这里找到。

http://mediatheques-aphp.bibliomedias.net/12.xml

修改

我创建了XML字符串并进行了测试。现在我得到以下错误。我该如何解决这些问题。

  

警告:simplexml_load_string()[function.simplexml-load-string]:   实体:第12行:解析器错误:输入不正确UTF-8,指示   编码!字节:C:\ Program中的0xEF 0x76 0x65 0x3C   文件\ Zend的\ Apache2的\ htdocs中\ voxmedia \程序\模块\进口\控制器\ NaiveController.php   在第1458行

     

警告:simplexml_load_string()[function.simplexml-load-string]:   2009年天真的C:\计划   文件\ Zend的\ Apache2的\ htdocs中\ voxmedia \程序\模块\进口\控制器\ NaiveController.php   在第1458行

     

警告:simplexml_load_string()[function.simplexml-load-string]:^   在C:\ Program中   文件\ Zend的\ Apache2的\ htdocs中\ voxmedia \程序\模块\进口\控制器\ NaiveController.php   在第1458行

OK现在我觉得问题在于使用字符串编码等等。有什么方法可以解决这个问题吗?

感谢。

4 个答案:

答案 0 :(得分:4)

simplexml_load_stringsimplexml_load_file是错误的,并且在具有复杂标记的XML上无法正常工作。 我尝试了两个函数来解析一些VALID XML SOAP响应,甚至无法得到错误消息。 我不得不使用DOMDocument代替(像魅力一样工作)。

以下是我们如何检查simplexml的错误(如果你很幸运看到错误,而不仅仅是从函数中返回“false”)

libxml_use_internal_errors(true);
$xml=simplexml_load_string($myXMLData); //or simplexml_load_file

foreach( libxml_get_errors() as $error ) {

    print_r($error);

}

答案 1 :(得分:1)

我可以通过一个小的解决方法找到我的问题的答案。 simplexml_load_string()不断显示编码错误。所以我使用simplexml_load_file()如下所示。我已将文件保存到本地位置,然后使用simplexml_load_file()加载。

$tempLocalPath = "temp/data.xml";
file_put_contents($tempLocalPath, $s3Data);
$xml = simplexml_load_file($tempLocalPath);

但是,我仍然不能理解为什么simplexml_load_string()无法解析同样的事情。

答案 2 :(得分:0)

你应该试试这个:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
simplexml_load_string($result);

答案 3 :(得分:-1)

当你echo一个实际上是一个对象的变量时,调用它的__toString()方法将对象转换为字符串,但是当你将对象传递给函数时,对象不会被转换。

使用:

$xml = simplexml_load_string( (string)$s3Data);

将$ s3Data对象强制转换为字符串。

PS: 使用var_dump($ s3Data)和var_dump($ xml)来调试变量的内容而不是echo。

相关问题