【问题标题】:PHP simplexml_load_string not workingPHP simplexml_load_string 不工作
【发布时间】:2012-03-06 14:29:07
【问题描述】:

我有一个从 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 字符串并进行了测试。现在我收到以下错误。我该如何解决这些问题。

警告:simplexml_load_string() [function.simplexml-load-string]: 实体:第 12 行:解析器错误:输入不正确的 UTF-8,指示 编码!字节:C:\Program 中的 0xEF 0x76 0x65 0x3C Files\Zend\Apache2\htdocs\voxmedia\application\modules\import\controllers\NaiveController.php 在第 1458 行

警告:simplexml_load_string() [function.simplexml-load-string]: 2009 天真 C:\Program Files\Zend\Apache2\htdocs\voxmedia\application\modules\import\controllers\NaiveController.php 在第 1458 行

警告:simplexml_load_string() [function.simplexml-load-string]: ^ 在 C:\程序 Files\Zend\Apache2\htdocs\voxmedia\application\modules\import\controllers\NaiveController.php 在第 1458 行

好的,现在我觉得问题出在字符串编码之类的东西上。有没有办法解决这个问题?

谢谢。

【问题讨论】:

  • 它“不起作用”是永远不够的信息。至少提供错误信息。
  • 嗨。没有错误信息。我的代码与其他 XML 字符串一起使用。请不要考虑文件。试想你有一个包含给定 URL 内容的 php 字符串变量。 $s3Data 是一个字符串变量,它包含给定 XML 文件中的内容。不要考虑 getObject() 等...
  • 我用最新的更新修改了我的问题。请检查。
  • 看起来可能是重复的。但是他们的答案 `utf8_encode() 对我不起作用。我已经用我修复它的方式提出了自己的答案。无论如何,感谢 Gordon 的帮助。

标签: php xml


【解决方案1】:

你应该试试这个:

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

【讨论】:

  • 这是他正在做的事情的完整版本,它没有任何帮助。 simplexml_load_string 被窃听。
【解决方案2】:

simplexml_load_stringsimplexml_load_file 有问题,不能很好地处理带有复杂标记的 XML。 我尝试了这两个函数来解析一些 VALID XML SOAP 响应,甚至无法收到错误消息。 我不得不改用DOMDocument(就像一个魅力一样)。

这是我们假设检查 simplexml 错误的方法(如果你幸运地看到错误,而不仅仅是函数返回的“假”)

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

foreach( libxml_get_errors() as $error ) {

    print_r($error);

}

【讨论】:

  • 天哪!我已经尝试了几个小时来使用simplexml_load_string 加载SOAP 请求字符串的结果,它坚持只是不工作(没有任何错误)。感谢DOMDocument 的参考,让我开心!
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

    用途:

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

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

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

    【讨论】:

    • 没有强制转换不起作用。我试过了。我的代码与其他 XML 字符串一起使用。请不要考虑文件。试想你有一个 php 字符串变量,它包含给定文件的内容。
    • 奇怪的使用 $xml = simplexml_load_string(file_get_contents('mediatheques-aphp.bibliomedias.net/12.xml'));在我的机器上工作,没有任何 xml 错误。
    • 引用 OP:我必须通过 Amazon S3 getObject() 来获取它。
    猜你喜欢
    • 2016-03-08
    • 2011-08-22
    • 1970-01-01
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-19
    相关资源
    最近更新 更多