PHP simplexml_load_string不工作

1dkrff03  于 2023-02-18  发布在  PHP
关注(0)|答案(5)|浏览(194)

我有一个从XML文件中检索到的XML字符串。我无法使用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字符串并进行了测试。现在我得到了以下错误。我该如何修复这些错误。
警告:简单表达式加载字符串()[函数.简单表达式加载字符串]:实体:第12行:解析器错误:输入不是正确的UTF-8,请指示编码!字节:0xEF 0x76 0x65 0x3C在C中:\程序文件\Zend\Apache2\htdocs\voxmedia\application\modules\import\controllers\NaiveController.php在第1458行
警告:简单表达式加载字符串()[函数.简单表达式加载字符串]:1458行上的C:\程序文件\Zend\Apache2\htdocs\voxmedia\application\modules\import\controllers\NaiveController.php的2009年初级版本
警告:简单表达式加载字符串()[函数.简单表达式加载字符串]:第1458行上的^in C:\程序文件\Zend\Apache2\htdocs\voxmedia\application\modules\import\controllers\NaiveController.php
好的,现在我觉得问题出在字符串编码之类的地方。有什么办法可以解决这个问题吗?
谢谢。

s4n0splo

s4n0splo1#

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);

}
cqoc49vn

cqoc49vn2#

我可以找到一个小的变通办法来回答我的问题。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()不能解析同样的东西。

anhgbhbe

anhgbhbe3#

如果你xml是soap请求的,你可以试试这个

$testxml= htmlentities(strval($xml));
63lcw9qa

63lcw9qa4#

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

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

将$s3Data对象强制转换为字符串。
PS:使用var_dump($s3Data)和var_dump($xml)来调试变量的内容,而不是使用echo。

bq8i3lrv

bq8i3lrv5#

你应该试试这个:

$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);

相关问题