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
相关产品推荐
相关产品推荐

