php 的 xml解析器,PHP最佳XML解析器

这是一个有用的函数,用于在扩展不可用时进行快速和简单的XML解析:<?php /**

* Convert XML to an Array

*

* @param string  $XML

* @return array

*/function XMLtoArray($XML){

$xml_parser = xml_parser_create();

xml_parse_into_struct($xml_parser, $XML, $vals);

xml_parser_free($xml_parser);

// wyznaczamy tablice z powtarzajacymi sie tagami na tym samym poziomie

$_tmp='';

foreach ($vals as $xml_elem) {

$x_tag=$xml_elem['tag'];

$x_level=$xml_elem['level'];

$x_type=$xml_elem['type'];

if ($x_level!=1 && $x_type == 'close') {

if (isset($multi_key[$x_tag][$x_level]))

$multi_key[$x_tag][$x_level]=1;

else

$multi_key[$x_tag][$x_level]=0;

}

if ($x_level!=1 && $x_type == 'complete') {

if ($_tmp==$x_tag)

$multi_key[$x_tag][$x_level]=1;

$_tmp=$x_tag;

}

}

// jedziemy po tablicy

foreach ($vals as $xml_elem) {

$x_tag=$xml_elem['tag'];

$x_level=$xml_elem['level'];

$x_type=$xml_elem['type'];

if ($x_type == 'open')

$level[$x_level] = $x_tag;

$start_level = 1;

$php_stmt = '$xml_array';

if ($x_type=='close' && $x_level!=1)

$multi_key[$x_tag][$x_level]++;

while ($start_level 

$php_stmt .= '[$level['.$start_level.']]';

if (isset($multi_key[$level[$start_level]][$start_level]) && $multi_key[$level[$start_level]][$start_level])

$php_stmt .= '['.($multi_key[$level[$start_level]][$start_level]-1).']';

$start_level++;

}

$add='';

if (isset($multi_key[$x_tag][$x_level]) && $multi_key[$x_tag][$x_level] && ($x_type=='open' || $x_type=='complete')) {

if (!isset($multi_key2[$x_tag][$x_level]))

$multi_key2[$x_tag][$x_level]=0;

else

$multi_key2[$x_tag][$x_level]++;

$add='['.$multi_key2[$x_tag][$x_level].']';

}

if (isset($xml_elem['value']) && trim($xml_elem['value'])!='' && !array_key_exists('attributes', $xml_elem)) {

if ($x_type == 'open')

$php_stmt_main=$php_stmt.'[$x_type]'.$add.'[\'content\'] = $xml_elem[\'value\'];';

else

$php_stmt_main=$php_stmt.'[$x_tag]'.$add.' = $xml_elem[\'value\'];';

eval($php_stmt_main);

}

if (array_key_exists('attributes', $xml_elem)) {

if (isset($xml_elem['value'])) {

$php_stmt_main=$php_stmt.'[$x_tag]'.$add.'[\'content\'] = $xml_elem[\'value\'];';

eval($php_stmt_main);

}

foreach ($xml_elem['attributes'] as $key=>$value) {

$php_stmt_att=$php_stmt.'[$x_tag]'.$add.'[$key] = $value;';

eval($php_stmt_att);

}

}

}

return $xml_array;}?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值