在PHP中拆分XML
发布时间:2020-12-13 14:12:48 所属栏目:PHP教程 来源:网络整理
导读:我有一个合并的xml与一个根元素和多个项子元素. 像这样的东西 root itemtest1/item itemtest2/item /root 我想要的是一种简单的方法来解析xml并从项目中创建一个xml字符串数组. $arrXml[0] = 'itemtest1/item';$arrXml[1] = 'itemtest2/item'; 我正在寻找一
我有一个合并的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:最后两种方法只有在您显示标记时才能明确定义. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |