【问题标题】:Parse CDATA with tag inside, using XMLReader PHP使用 XMLReader PHP 解析带有标签的 CDATA
【发布时间】:2018-12-18 10:56:51
【问题描述】:

我需要解析一个包含 CDATA 标记的 XML 文件。在这个标签里面,还有一个我想得到的标签。如何使用 XMLReader 实现这一点?

例子:

<glz:Param name="TITLE">
       <![CDATA[Yellow <http://www.yellow.it>]]>
</glz:Param>

我怎样才能得到完整的信息Yellow &lt;http://www.yellow.it&gt;?我只能得到“黄色”。

这是我的代码:

// load file, create a reader variable, etc.
if($reader->nodeType == XMLReader::CDATA)
{
   echo $reader->value;
}

【问题讨论】:

  • 您是在浏览器还是 shell 中回显该值?
  • @Gordon 浏览器
  • 好的,所以问题可能是 XmlReader 正确地获取了 CDATA 标记中的全部内容,但您的浏览器再次将其解释为 html。检查页面源以查看它是否包含 a 元素。如果是这样,请尝试 echo htmlentities($reader->value) 或发送带有 content-type: text/plain 的标头
  • @Gordon 成功了!太感谢了! :)
  • @Gordon 也许你应该把它写成答案而不是评论......这样我就可以选择它作为最佳答案:)

标签: php xml parsing xmlreader cdata


【解决方案1】:

根据您的 cmets:

问题可能是 XmlReader 正确获取了 CDATA 标记中的全部内容,但您的浏览器再次将其解释为 html。检查页面源以查看它是否包含 a 元素。如果是这样,请尝试

echo htmlentities($reader->value); 

或发送内容类型为:text/plain 的标头。

【讨论】:

    【解决方案2】:

    你可以通过字符串搜索得到它。如您所见,String "http://www.yellow.it]]>" 不是 XML,因此您无法使用 XMLReader 解析它。 请在上面搜索字符串。 例如,可以将字符串拆分为“http:”,可以得到 2 个子字符串。 从第二个字符串中,您可以获得不带“>]]>”的完整链接。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-09
      • 1970-01-01
      • 2013-06-27
      • 1970-01-01
      • 2013-02-27
      • 1970-01-01
      • 2015-07-02
      相关资源
      最近更新 更多