用php simplexml解析时如何在xml节点中保留html标签?

时间:2019-06-27 18:10:50

标签: php simplexml simplexml-load-string

我在xml文档中嵌入了html标签,我想保留它们。

<?php
$xml = "<root><node1>node1 contains no html</node1><node2>node2 contains a <sup>superscript</sup> html tag</node2></root>";
$xmlObj = simplexml_load_string($xml);

echo "node1:\n";
echo $xmlObj->node1;
echo "\nnode2:\n";
echo $xmlObj->node2;
echo "\nnode1 using asXML\n";
echo $xmlObj->node1->asXML();
echo "\nnode2 using asXML\n";
echo $xmlObj->node2->asXML();
echo "\n\n";
?>

此代码输出:

node1:
node1 contains no html
node2:
node2 contains a  html tag
node1 using asXML
<node1>node1 contains no html</node1>
node2 using asXML
<node2>node2 contains a <sup>superscript</sup> html tag</node2>

我只想输出:

node2 contains a <sup>superscript</sup> html tag

有没有一种方法可以从xml中提取出node2来保留<sup>标记和其他html标记,而却不能<node2> xml标记一起输出?

谢谢。

编辑:这被标记为重复,但是在重复问题上接受的答案不是我的首选答案,因此我在下面添加了我的首选答案,该答案由CrMosk在2011年8月20日给出

function SimpleXMLElement_innerXML($xml)
  {
    $innerXML= '';
    foreach (dom_import_simplexml($xml)->childNodes as $child)
    {
        $innerXML .= $child->ownerDocument->saveXML( $child );
    }
    return $innerXML;
  };

我刚刚将此功能添加到了我的项目中,然后在需要获取不带有xml标记的节点时调用它:

echo "\nnode2 using new function\n";
echo SimpleXMLElement_innerXML($xmlObj->node2);

输出所需文本:

node2 using new function
node2 contains a <sup>superscript</sup> html tag

0 个答案:

没有答案