> 백엔드 개발 > PHP 튜토리얼 > 高分在线求助XML解析

高分在线求助XML解析

WBOY
풀어 주다: 2016-06-23 14:25:06
원래의
910명이 탐색했습니다.

本帖最后由 HUENKE 于 2013-10-25 15:58:22 编辑

xml

<?xml version="1.0" encoding="utf-8"?><nodes>	<node id="c5569e2c-0f4a-4ec2-86ba-736b79eca18c" name="A公司"		type="0">		<node id="4f2b55e9-e10a-496b-8bca-60e6f26daee5" name="部门1" type="1">			<node id="363" name="叶子1" type="2" playurl="http://XXXXXXX363" />		</node>		<node id="0c5ce42f-ba31-4b7a-8173-79ecae4a73ca" name="部门2" type="1">			<node id="241" name="叶子1" type="2"	playurl="http://xxxxx=241" />			<node id="356" name="叶子1" type="2" playurl="xxxxxxxxx=356" />		</node>	</node></nodes>
로그인 후 복사


结构为 nodes下面有node下面还有node
我想做三重循环
foreach()
{
存公司名称
foreach()
{
存部门名称
foreach()
{ 存叶子名称}
}
}

请问我该怎么解析呢,


回复讨论(解决方案)

SimpleXML 用过嘛?

SimpleXML 没解析出来
能帮简单调试一下吗

你想要怎样的数据格式?,下面自己组织一下数据结构吧

<?php$string = <<<XML<?xml version="1.0" encoding="utf-8"?><nodes>    <node id="c5569e2c-0f4a-4ec2-86ba-736b79eca18c" name="A公司"        type="0">        <node id="4f2b55e9-e10a-496b-8bca-60e6f26daee5" name="部门1" type="1">            <node id="363" name="叶子1" type="2" playurl="http://XXXXXXX363" />        </node>        <node id="0c5ce42f-ba31-4b7a-8173-79ecae4a73ca" name="部门2" type="1">            <node id="241" name="叶子1" type="2"    playurl="http://xxxxx=241" />            <node id="356" name="叶子1" type="2" playurl="xxxxxxxxx=356" />        </node>    </node></nodes>XML;$xml = new SimpleXMLElement($string);$result = $xml->xpath('//node/@name');while(list( , $node) = each($result)) {    echo '@name: ',$node,"\n";}$result = $xml->xpath('//node/@id');while(list( , $node) = each($result)) {    echo '@id: ',$node,"\n";}$result = $xml->xpath('//node[@type=1]/../@id');while(list( , $node) = each($result)) {    echo '@部门的parent_id: ',$node,"\n";}$result = $xml->xpath('//node[@type=2]/../@id');while(list( , $node) = each($result)) {    echo '@叶子的parent_id: ',$node,"\n";}?>
로그인 후 복사

$s =<<< XML<?xml version="1.0" encoding="utf-8"?><nodes>    <node id="c5569e2c-0f4a-4ec2-86ba-736b79eca18c" name="A公司"        type="0">        <node id="4f2b55e9-e10a-496b-8bca-60e6f26daee5" name="部门1" type="1">            <node id="363" name="叶子1" type="2" playurl="http://XXXXXXX363" />        </node>        <node id="0c5ce42f-ba31-4b7a-8173-79ecae4a73ca" name="部门2" type="1">            <node id="241" name="叶子1" type="2"    playurl="http://xxxxx=241" />            <node id="356" name="叶子1" type="2" playurl="xxxxxxxxx=356" />        </node>    </node></nodes>XML;$xml = simplexml_load_string($s);foreach($xml->node as $node) {  foreach($node->attributes() as $k=>$v) echo "$k => $v\n";  foreach($node->node as $node) {    foreach($node->attributes() as $k=>$v) echo "$k => $v\n";    foreach($node->node as $node) {      foreach($node->attributes() as $k=>$v) echo "$k => $v\n";    }  }}
로그인 후 복사
id => c5569e2c-0f4a-4ec2-86ba-736b79eca18c
name => A公司
type => 0
id => 4f2b55e9-e10a-496b-8bca-60e6f26daee5
name => 部门1
type => 1
id => 363
name => 叶子1
type => 2
playurl => http://XXXXXXX363
id => 0c5ce42f-ba31-4b7a-8173-79ecae4a73ca
name => 部门2
type => 1
id => 241
name => 叶子1
type => 2
playurl => http://xxxxx=241
id => 356
name => 叶子1
type => 2
playurl => xxxxxxxxx=356

就是按他原样的树状结构

A公司
    部门1
叶子1

部门2
。。。。

再给你一个吧,自己修改一下就是树状了

<?php$string = <<<XML<?xml version="1.0" encoding="utf-8"?><nodes>    <node id="c5569e2c-0f4a-4ec2-86ba-736b79eca18c" name="A公司"        type="0">        <node id="4f2b55e9-e10a-496b-8bca-60e6f26daee5" name="部门1" type="1">            <node id="363" name="叶子1" type="2" playurl="http://XXXXXXX363" />        </node>        <node id="0c5ce42f-ba31-4b7a-8173-79ecae4a73ca" name="部门2" type="1">            <node id="241" name="叶子1" type="2"    playurl="http://xxxxx=241" />            <node id="356" name="叶子1" type="2" playurl="xxxxxxxxx=356" />        </node>    </node></nodes>XML;$xml = new SimpleXMLElement($string);// var_export($xml);$xmlIterator = new RecursiveIteratorIterator(    new SimpleXMLIterator($string),    RecursiveIteratorIterator::SELF_FIRST);foreach ($xmlIterator as $nodeName => $node) {    echo str_repeat('-', (int)$node['type']);    echo $node['id'], ',', $node['name'], PHP_EOL;}?>
로그인 후 복사

上面#6
$xml = new SimpleXMLElement($string); 
这句可以删掉,前面调试的时候留下的

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿