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

PHP如何获取XML节点内的HTML内容为字符串?

如何在PHP中获取XML节点内的完整HTML内容作为字符串

针对你的需求——获取<texto>节点内所有子元素及文本组成的原始XML字符串,SimpleXML本身没有直接的innerXML方法,但可以通过两种方式实现:

方法一:结合SimpleXML与DOMDocument转换处理

SimpleXML和DOM可以无缝转换,通过DOM的API拼接子节点的XML内容:

// 假设$xml是已加载完成的SimpleXMLElement对象
$textoNodes = $xml->xpath('//texto');
if (!empty($textoNodes)) {
    // 取出第一个匹配的texto节点
    $simpleNode = $textoNodes[0];
    // 转换为DOM节点
    $domNode = dom_import_simplexml($simpleNode);
    $innerXml = '';
    // 遍历所有子节点,拼接XML字符串
    foreach ($domNode->childNodes as $child) {
        $innerXml .= $domNode->ownerDocument->saveXML($child);
    }
    // $innerXml即为目标字符串,可根据需要用htmlspecialchars转义输出
    echo htmlspecialchars($innerXml);
}

方法二:利用SimpleXML的asXML方法截取内容

asXML()方法会返回包含当前节点的完整XML,我们可以通过字符串处理去掉外层的<texto>标签:

$textoNodes = $xml->xpath('//texto');
if (!empty($textoNodes)) {
    $fullXml = $textoNodes[0]->asXML();
    // 正则替换去掉开头的<texto>和结尾的</texto>标签(s模式匹配换行)
    $innerXml = preg_replace('/^<texto>|<\/texto>$/s', '', $fullXml);
    echo htmlspecialchars($innerXml);
}

为什么你之前的XPath尝试失效?

  • //texto/text():仅提取节点内的纯文本节点,不会包含子元素
  • innerXml()/nodevalue():不属于标准XPath语法,XPath没有这类内置函数
  • //texto/node():返回的是节点对象列表(包含元素、文本节点等),并非直接的XML字符串

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 10:15:34