PHP-SimpleXML获取子元素之间的元素内容
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP-SimpleXML获取子元素之间的元素内容,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2149字,纯文字阅读大概需要4分钟。
内容图文
![PHP-SimpleXML获取子元素之间的元素内容](/upload/InfoBanner/zyjiaocheng/659/30994165a321407b967e651ad6524294.jpg)
我正在使用SimpleXML解析PHP中的XML,并具有如下所示的XML:
<xml>
<element>
textpart1
<subelement>subcontent1</subelement>
textpart2
<subelement>subcontent2</subelement>
textpart3
</element>
</xml>
当我执行$xml-> element时,它自然会给我整个元素,就像所有三个文本部分一样.
因此,如果我将其解析为一个数组(为孩子使用foreach),则会得到:
0 => textpart1textpart2textpart3, 1 => subcontent1, 2 => subcontent2
我需要一种方法来解析< element>节点,以便将在子元素处停止或开始的每个文本部分视为自己的元素.
结果,我正在寻找可以在这样的数组中表达的有序列表:
0 => textpart1, 1 => subcontent1, 2 => textpart2, 3 => subcontent2, 4 => textpart3
在不更改XML文件的情况下有可能吗?预先感谢您的任何提示!
解决方法:
就像其他人所说的那样,SimpleXML不支持将单独的文本节点作为单独的实体访问,因此您将需要使用一些DOM方法对其进行补充.幸运的是,您可以使用dom_import_simplexml和simplexml_import_dom在两者之间随意切换.
您需要的DOM功能的关键部分是:
> DOMElement-> childNodes成员变量,以可迭代列表的形式直接访问特定元素下的所有节点
> DOMNode-> nodeType变量,用于确定特定子项是文本节点还是元素
> DOMNode-> nodeValue变量以获取实际文本
有了这些,您可以编写一个函数,该函数返回一个数组,其中包含用于子元素的SimpleXML对象和用于子文本节点的字符串的混合物,如下所示:
function get_child_elements_and_text_nodes($sx_element)
{
$return = array();
$dom_element = dom_import_simplexml($sx_element);
foreach ( $dom_element->childNodes as $dom_child )
{
switch ( $dom_child->nodeType )
{
case XML_TEXT_NODE:
$return[] = $dom_child->nodeValue;
break;
case XML_ELEMENT_NODE:
$return[] = simplexml_import_dom($dom_child);
break;
}
}
return $return;
}
在您的情况下,您需要递归该树,如果您在混合使用DOM和SimpleXML时使它有些混乱,因此您可以改为在DOM中完全编写递归并在运行它之前转换SimpleXML对象:
function recursively_find_text_nodes($dom_element)
{
$return = array();
foreach ( $dom_element->childNodes as $dom_child )
{
switch ( $dom_child->nodeType )
{
case XML_TEXT_NODE:
$return[] = $dom_child->nodeValue;
break;
case XML_ELEMENT_NODE:
$return = array_merge($return, recursively_find_text_nodes($dom_child));
break;
}
}
return $return;
}
$text_nodes = recursively_find_text_nodes(dom_import_simplexml($simplexml->element));
Here’s a live demo of that last function.
内容总结
以上是互联网集市为您收集整理的PHP-SimpleXML获取子元素之间的元素内容全部内容,希望文章能够帮你解决PHP-SimpleXML获取子元素之间的元素内容所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。