【问题标题】:Can parse one document, but not another可以解析一个文档,但不能解析另一个
【发布时间】:2013-06-09 23:01:28
【问题描述】:

我有两个 XML 文档,格式如下:

<?xml version="1.0" ?>
<article>
  <body>
    <![CDATA[
      *some text*
    ]]>
  </body>
</article>

我想用这个来回应他们:

<?php
  $xml = simplexml_load_file("." . $filename); 
  echo $xml->body;
?>

但其中一个有效,另一个只是没有回应。怎么回事?

更新: 产生错误的文档包含这个撇号:' 删除此撇号后,代码将起作用。我需要某种方式来转义这样的字符,我该怎么做?

【问题讨论】:

  • 不应该转义输出吗?
  • 我认为 simpleXML 已经做到了。无论如何,它可以与一个 XML 一起使用,那么为什么不能与另一个 XML 一起使用呢?

标签: php xml formatting cdata


【解决方案1】:

只需回显asXML(),您可能会看到第二个文件的错误。

echo $xml->asXML();

这里有一个关于 SimpleXML 的简单教程:http://php.net/manual/en/simplexml.examples-basic.php

【讨论】:

  • 这不起作用的文章没有回应任何内容
【解决方案2】:

省略你的撇号:

<?php
  $text = file_get_contents("." . $filename); 
  $text = str_replace("'", "&apos;", $text);
  $xml = simplexml_load_string($text); 
  echo $xml->body;
?>

另外,有人遇到了类似的问题(没有崩溃,但有乱码)并提出了相同的解决方案。稍后在该论坛帖子中,他们推测 utf8_encode 和 utf8_decode,您也可以尝试。链接:http://board.phpbuilder.com/showthread.php?10359181-RESOLVED-SimpleXML-apostrophe-problem&p=10886946&viewfull=1#post10886946

【讨论】:

  • 很好,但是如果有其他字符会导致这个问题呢?
  • 尝试 utf8_decode() 而不是 str_replace(),这可能是问题所在。
猜你喜欢
  • 2021-09-07
  • 2021-04-21
  • 2020-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-19
  • 2020-11-27
相关资源
最近更新 更多