获取 SimpleXMLElement 的 XML 内容

Posted

技术标签:

【中文标题】获取 SimpleXMLElement 的 XML 内容【英文标题】:Getting the XML content of a SimpleXMLElement 【发布时间】:2011-05-07 22:07:50 【问题描述】:

有没有办法提取 SimpleXMLElement 的“innerhtml”?

例如,我如何使用 SimpleXMLElement 从以下 XML 代码中获取 '<div><h1>Hello World</h1></div>'

<xml>
  <body1>
    <div><h1>Hello World</h1></div>
  </body1>
  <body2>
    <div><h2>Goodby Moon</h2></div>
  </body2>
</xml>

我阅读了文档,我想到的只是$xml-&gt;body1-&gt;asXML();。 这几乎是正确的解决方案,但它也添加了根标签:

 <body1>
   <div><h1>Hello World</h1></div>
 </body1>

是否可以跳过周围的body1标签?


编辑:

xml 也可能如下所示:

<xml>
  <body1>
    <div><h1>Hello World</h1></div>
    <div><h1>Hello Moon</h1></div>
    Some Text
  </body1>
  <body2>
    <div><h2>Goodby Moon</h2></div>
  </body2>
</xml>

如:http://codepad.org/8ZuRYZOW

【问题讨论】:

【参考方案1】:

如果您确定要查找的是div

$xml-&gt;body1[0]-&gt;div-&gt;asXML();

否则

$xml-&gt;body1[0]-&gt;children()-&gt;asXML();

http://codepad.org/QUytim28 否则http://codepad.org/hDt28BL6

【讨论】:

(+1) 感谢您的代码。但是,一旦有多个子元素,它就会失败。 codepad.org/EHepjsZg 这就是您需要在问题中提供更多详细信息的原因;)这是解决方案codepad.org/BCxSzP2m 再次感谢!不幸的是,它仍然无法正常工作。我想出了同样的想法,但是它跳过了纯文本。 (见我编辑的问题) 嗯,这不是一个真正有效的 XML 或 HTML。 SimpleXML 使用有效的 XML 很简单,如果使用更复杂的 XML,您应该使用 DOMDocument,或者使其有效,或者不通过 XML 文件。 嗯,嗯,嗯,实际上,codepad.org/m3z15M1p 它的工作原理感谢php.net/manual/fr/simplexmlelement.asXML.php 这个页面的第一条评论。这很丑陋,但仍然......【参考方案2】:

您可能想要children method 或者您想要使用$xml-&gt;body1[ 0 ]-&gt;asXML();(数组访问)

【讨论】:

$xml-&gt;body1[ 0 ]-&gt;asXML();$xml-&gt;body1-&gt;asXML();有区别吗? @Ghommey :如果您的 xml 中有超过 1 个 &lt;body1&gt;,则会出现唯一的区别

以上是关于获取 SimpleXMLElement 的 XML 内容的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SimpleXMLElement 获取 CDATA [重复]

多维数组到多维 SimpleXMLElement(XML 对象)[重复]

php中将SimpleXMLElement Object数组转化为普通数组

如何使用 SimpleXmlElement 编写 CDATA?

php使用 SImpleXMLElement 把 xml 转为数组

php怎么生成带冒号的节点和属性的,xml使用SimpleXMLElement类或其他php类