You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解析含HTML内容的XML数据:simplexml_load_string标签丢失问题

解决SimpleXML移除XML中HTML标签的问题

我懂你的问题啦——当你用simplexml_load_string($result, "SimpleXMLElement", LIBXML_NOCDATA)加载包含HTML内容的XML时,那些<br>之类的HTML标签都被过滤掉,只剩纯文本了,对吧?这是因为SimpleXML会把XML元素下的HTML标签当作独立的XML子节点处理,而不是文本内容的一部分,直接获取元素文本时就会忽略这些标签。

下面给你两种可行的解决方案:

方案一:用DOMDocument保留HTML结构(无需修改原XML)

如果没法调整原始XML的输出格式,用DOMDocument可以完美保留HTML标签的结构,步骤如下:

// 你的原始XML数据
$result = '<JUDGMENT> <summary>INTRODUCTION: <br />This appeal borders on the Law of Contract.<br /><br />FACTS: <br />From the statement of claim filed by the plaintiff (respondent) breach of contract and negligence were said to have been committed against...</summary></JUDGMENT>';

// 初始化DOMDocument
$dom = new DOMDocument();
// 禁用XML错误提示(避免HTML标签引发的警告)
libxml_use_internal_errors(true);
$dom->loadXML($result);
libxml_clear_errors();

// 定位到summary元素
$summaryNode = $dom->getElementsByTagName('summary')->item(0);

// 提取summary元素内的完整HTML内容
$htmlContent = '';
foreach ($summaryNode->childNodes as $child) {
    $htmlContent .= $dom->saveHTML($child);
}

// 输出结果,会保留所有<br>标签
echo $htmlContent;

这段代码会遍历summary节点下的所有子节点(包括文本和HTML标签),用saveHTML()把每个节点转换成字符串,最终拼接出完整的带HTML标签的内容。

方案二:让XML输出把HTML放在CDATA块中(更简便)

如果能控制数据源的XML生成逻辑,把包含HTML的内容放在<![CDATA[...]]>块里,这样SimpleXML就能直接识别为纯文本保留所有标签:

修改后的XML示例:

<JUDGMENT>
  <summary><![CDATA[INTRODUCTION: <br />This appeal borders on the Law of Contract.<br /><br />FACTS: <br />From the statement of claim filed by the plaintiff (respondent) breach of contract and negligence were said to have been committed against...]]></summary>
</JUDGMENT>

这时候你原来的代码就能直接拿到带HTML标签的内容了:

$xml = simplexml_load_string($result, "SimpleXMLElement", LIBXML_NOCDATA);
$summaryContent = (string)$xml->summary;
echo $summaryContent; // 会显示带<br>标签的完整内容

内容的提问来源于stack exchange,提问作者funsholaniyi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:08:37