为了账号安全,请及时绑定邮箱和手机立即绑定

PHP SimpleXML获取innerXML

PHP SimpleXML获取innerXML

PHP
开心每一天1111 2020-02-01 17:22:51
我需要获取以下XML内容的HTML内容answer:<qa> <question>Who are you?</question> <answer>Who who, <strong>who who</strong>, <em>me</em></answer></qa>因此,我想获取字符串“谁,<strong>谁</ strong>,<em>我</ em>”。如果我使用answeras SimpleXMLElement,则可以调用asXML()以获取“ <answer>谁,<strong>谁</ strong>,<em>我</ em> </ answer>”,但是如何获取内部XML没有元素本身包裹的元素的元素?我更喜欢不涉及字符串函数的方法,但是如果那是唯一的方法,那就这样吧。
查看完整描述

3 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

最直接的解决方案是使用简单XML实现自定义get innerXML:


function simplexml_innerXML($node)

{

    $content="";

    foreach($node->children() as $child)

        $content .= $child->asXml();

    return $content;

}

在您的代码中,替换$body_content = $el->asXml();为$body_content = simplexml_innerXML($el);


但是,您也可以切换到另一个API,该API区分innerXML(您正在寻找的内容)和externalXML(您现在获得的内容)。Microsoft Dom libary提供了这种区别,但是不幸的是PHP DOM却没有。


我发现PHP XMLReader API提供了这种区别。请参见readInnerXML()。尽管此API在处理XML方面有完全不同的方法。尝试一下。


最后,我要强调的是XML并不是要提取数据作为子树,而是提取数据。这就是为什么您在寻找正确的API时遇到麻烦的原因。将HTML子树存储为一个值(并转义所有标签)而不是XML子树会更“标准”。还要注意,某些HTML合成器并不总是XML兼容的(即

vs

)。无论如何,在实践中,您的方法对于编辑xml文件绝对更方便。


查看完整回答
反对 回复 2020-02-01
  • 3 回答
  • 0 关注
  • 375 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信