【问题标题】:Extract text including line breaks from XML with PHP使用 PHP 从 XML 中提取包含换行符的文本
【发布时间】:2010-12-25 14:39:21
【问题描述】:

当我从 XML 文件中提取文本时

Here is some text before the
<br/><br/>
line break.

在 PHP 中,

echo $value->description;

我得到了文本,但没有包含 br 标记。我该如何解决这个问题?

谢谢。

【问题讨论】:

  • 请显示一些数据。文字原本是什么样子的?
  • 看起来 XML 文件设置不正确。如果节点的内容应该是 HTML,那么整个内容必须包含在 &lt;![CDATA[...]]&gt; 中(参见 en.wikipedia.org/wiki/Cdata)。否则,内容将由 XML 解析器解释,并且 HTML 标记将创建新节点(这就是您现在所体验的)。如果您可以控制 XML 文件,请确保正确设置它。

标签: php html xml text


【解决方案1】:

根据经验,您甚至不应该在 &lt;br/&gt; 标记之后看到任何文本。这样做的原因是因为假定 XML 中的所有文本节点都将 替换为对应的 htmlentity(),并且所有其他特殊字符都替换为 htmlspecialchars()。我相当肯定它会导致您的 XML DOM 解析器出错,或者至少将其作为一个新节点,一个带有换行符的空文本节点,我认为。

唯一的解决方案是将 XML 存储到一个字符串中,使用正则表达式取出 &lt;br/&gt; 标签(好吧,所有的 标签),并用我记下的正确值替换它们以上。

或者,您可以阅读有关 CDATA here 的信息,然后转义标签,但前提是您是创建该 XML 文件的人。您应该通知您从中获取 XML 的站点的网站管理员 XML 的创建不正确。

【讨论】:

  • 是的,就是缺少 CDATA
【解决方案2】:

首先,您可以将 XML 文件读入一个字符串,然后将 '
' 替换为 '
'。现在,您可以将替换后的字符串作为 XML 数据加载,并使用 XML DOM 进行处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 2014-08-10
    相关资源
    最近更新 更多