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

PHP SimpleXML解析XML:如何将含<p>标签的节点转为HTML内容?

解决SimpleXML解析XML时保留内

标签的问题

问题场景

用PHP的SimpleXML加载XML文件时,节点内的多个

标签会被解析为包含p数组的SimpleXMLElement对象,直接输出只能拿到纯文本段落,无法保留

标签结构。

示例XML

<item>
  <title>示例文章</title>
  <description>
    <p>这是第一段内容,包含一些特殊字符:&lt; &gt; &amp;</p>
    <p>这是第二段内容,换行测试</p>
  </description>
</item>

用户原有代码及输出

$xml = simplexml_load_file('example.xml');
$description = $xml->item->description;
print_r($description);

输出结果:

SimpleXMLElement Object
(
    [p] => Array
        (
            [0] => 这是第一段内容,包含一些特殊字符:< > &
            [1] => 这是第二段内容,换行测试
        )
)

解决方案

方法1:直接使用asXML()获取完整结构

SimpleXML的asXML()方法会返回节点的原始XML内容,直接调用就能拿到带

标签的完整HTML:

$xml = simplexml_load_file('example.xml');
// 获取包含<description>标签的完整内容
$fullDescription = $xml->item->description->asXML();
// 可选:移除外层的<description>标签
$cleanHtml = preg_replace('/^<description>|<\/description>$/', '', $fullDescription);
echo $cleanHtml;

输出结果:

<p>这是第一段内容,包含一些特殊字符:&lt; &gt; &amp;</p>
<p>这是第二段内容,换行测试</p>

方法2:手动遍历拼接HTML

如果需要自定义每个

标签的属性(比如添加class),可以遍历p节点逐个拼接:

$xml = simplexml_load_file('example.xml');
$description = $xml->item->description;
$html = '';
foreach ($description->p as $paragraph) {
    // 转义特殊字符避免HTML错误
    $text = htmlspecialchars((string)$paragraph);
    $html .= "<p class='article-paragraph'>{$text}</p>";
}
echo $html;

输出结果:

<p class='article-paragraph'>这是第一段内容,包含一些特殊字符:&lt; &gt; &amp;</p>
<p class='article-paragraph'>这是第二段内容,换行测试</p>

注意事项

  • 当内只有一个

    标签时,$description->p是单个SimpleXMLElement对象,foreach依然能正常遍历,无需额外判断。

  • 优先使用asXML()方法,代码更简洁且能完整保留原始标签结构;手动拼接适合需要个性化处理的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 07:13:23