在PHP中拆分XML

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了在PHP中拆分XML脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个合并的XMl与一个根元素和多个项子元素.
像这样的东西
<root>
  <ITem>test1</item>
  <item>test2</item>
 </root>

我想要的是一种简单方法来解析xML并从项目中创建一个xml字符串数组.

$arrXml[0] = '<item>test1</item>';
$arrXml[1] = '<item>test2</item>';

我正在寻找一个优雅的解决方案而不是任何解决方案.

好的,就像在你的问题的评论中已经提到的那样,我不相信这是你应该做的,但是因为我不能忍受SimpleXml并且不希望人们认为这是唯一的方法,这里是如何做到

与DOM:

$arrXml = array();
$dom    = new DOMDocument;
$dom->loadXML( $xml );
foreach( $dom->getelementsbytagname( 'item' ) as $item ) {
    $arrXml[] = $dom->saveXML( $item );
}
PRint_r( $arrXml );

使用XMLReader:

$arrXml = array();
$reader = new XmlReader;
$reader->xml( $xml );
while( $reader->read() ) {
    if( $reader->localName === 'item' && $reader->nodeTyPE === 1 ) {
        $arrXml[] = $reader->readOuterXml();
    }
}
print_r( $arrXml );

和XMLParser *:

xml_parse_into_struct(xml_parser_create(),$xml,$nodes);
$xmlArr = array();
foreach($nodes as $node) {
    if($node['tag'] === 'ITEM') {
        $arrXml[] = "<item>{$node['value']}</item>";
    }
}
print_r($arrXml);

*这也可以通过遇到ITEM元素时触发的回调来完成.需要更多代码,但非常灵活.

请注意,根据您的真实XML,上述所有内容可能都需要进行一些调整.

鉴于您的问题中的XML(可能只是一个示例)简单且定义良好,您还可以使用explode():

$arrXml = array_map( 'trim',array_filter(
        explode( PHP_EOL,$xml ),function( $line ) { return substr( $line,6 ) === '<item>'; }
));
print_r( $arrXml );

或正则表达式(以下阅读免责声明)

preg_match_all('#<item>.*</item>#',$arrXml);
print_r($arrXml[0]);

免责声明现在,只是为了确保您没有开始定期使用Regex或Explode解析XML:最后两种方法只有在您显示标记时才能明确定义.

脚本宝典总结

以上是脚本宝典为你收集整理的在PHP中拆分XML全部内容,希望文章能够帮你解决在PHP中拆分XML所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。