inushome 发表于 2017-4-10 07:11:48

PHP把相对复杂结构的XML转换成数组。

这个问题纠结了半上午,看网上也没有什么特别有帮助的文章,我就发出来和大家共享一下吧。

<?php
$xml = simplexml_load_file ( "data.xml" );
$result = $xml->xpath ( "Control" );
foreach($result as $key=>$r)
{
unset($a);
unset($pro_attr);
unset($pro_a);
$a=(int)$r;
$a=(string)$r;
foreach($r->Property as $k=>$p)
{
$pro_a=(string)$p;
$pro_a=(string)$p;
$pro_a=(string)$p;
$pro_attr[(string)$p]=$pro_a;
}
$a=$pro_attr;
$attr[]=$a;
}
print_r($attr);
?>

本来呢,用ECHO输出那个$return的项结果得出来 的值 是正确的,以为取出来本来就是数组,但用print_r打印输出发现都是simplexmlelement object对象,这不是我想要的,我想要的是这样的

Array
(
=> Array
(
=> 1
=> CCTextBox
=> Array
(
=> Array
(
=> CCId
=> CCString
=> TextBox1
)
=> Array
(
=> CCTop
=> CCInteger
=> 60
)
=> Array
(
=> CCLeft
=> CCInteger
=> 200
)
=> Array
(
=> CCWidth
=> CCInteger
=> 454
)
=> Array
(
=> CCHeight
=> CCInteger
=> 21
)
=> Array
(
=> CCPassWordChar
=> CCString
=>
)
=> Array
(
=> CCEnabled
=> CCInteger
=> 1
)
=> Array
(
=> CCMaxLength
=> CCInteger
=>
)
=> Array
(
=> CCBackColor
=> CCInteger
=> #0000ff
)
=> Array
(
=> CCForeColor
=> CCInteger
=>
)
=> Array
(
=> CCTextAlign
=> CCInteger
=>
)
=> Array
(
=> CCTabIndex
=> CCInteger
=> 0
)
)
)
=> Array
(
=> 2
=> CCButton
=> Array
(
=> Array
(
=> CCId
=> CCString
=> Button1
)
=> Array
(
=> CCTop
=> CCInteger
=> 100
)
=> Array
(
=> CCLeft
=> CCInteger
=> 200
)
=> Array
(
=> CCWidth
=> CCInteger
=> 550
)
=> Array
(
=> CCHeight
=> CCInteger
=> 24
)
=> Array
(
=> CCEnabled
=> CCInteger
=> 1
)
=> Array
(
=> CCBackColor
=> CCInteger
=>
)
=> Array
(
=> CCForeColor
=> CCInteger
=>
)
=> Array
(
=> CCText
=> CCString
=> 杩欐槸涓€涓狟UTTON
)
=> Array
(
=> CCTabIndex
=> CCInteger
=> 0
)
)
)
=> Array
(
=> 3
=> CCLabel
=> Array
(
=> Array
(
=> CCId
=> CCString
=> Label1
)
=> Array
(
=> CCTop
=> CCInteger
=> 140
)
=> Array
(
=> CCLeft
=> CCInteger
=> 200
)
=> Array
(
=> CCWidth
=> CCInteger
=> 100
)
=> Array
(
=> CCHeight
=> CCInteger
=> 20
)
=> Array
(
=> CCEnabled
=> CCInteger
=> 1
)
=> Array
(
=> CCBackColor
=> CCInteger
=>
)
=> Array
(
=> CCForeColor
=> CCInteger
=>
)
=> Array
(
=> CCText
=> CCString
=> 鏂囨湰
)
=> Array
(
=> CCTabIndex
=> CCInteger
=> 0
)
)
)
=> Array
(
=> 4
=> CCComboBox
=> Array
(
=> Array
(
=> CCId
=> CCString
=> ComboBox1
)
=> Array
(
=> CCTop
=> CCInteger
=> 180
)
=> Array
(
=> CCLeft
=> CCInteger
=> 200
)
=> Array
(
=> CCWidth
=> CCInteger
=> 154
)
=> Array
(
=> CCHeight
=> CCInteger
=> 21
)
=> Array
(
=> CCEnabled
=> CCInteger
=> 1
)
=> Array
(
=> CCBackColor
=> CCInteger
=>
)
=> Array
(
=> CCForeColor
=> CCInteger
=>
)
=> Array
(
=> CCText
=> CCString
=> 涓嬫媺鍒?
)
=> Array
(
=> CCTabIndex
=> CCInteger
=> 0
)
=> Array
(
=> CCValues
=> CCString
=>
)
)
)
=> Array
(
=> 5
=> CCCheckBox
=> Array
(
=> Array
(
=> CCId
=> CCString
=> CheckBox1
)
=> Array
(
=> CCTop
=> CCInteger
=> 220
)
=> Array
(
=> CCLeft
=> CCInteger
=> 200
)
=> Array
(
=> CCWidth
=> CCInteger
=> 20
)
=> Array
(
=> CCHeight
=> CCInteger
=> 20
)
=> Array
(
=> CCEnabled
=> CCInteger
=> 1
)
=> Array
(
=> CCForeColor
=> CCInteger
=>
)
=> Array
(
=> CCText
=> CCString
=> 鍗曢€?
)
=> Array
(
=> CCTabIndex
=> CCInteger
=> 0
)
=> Array
(
=> CCValues
=> CCString
=>
)
)
)
=> Array
(
=> 6
=> CCRadioButton
=> Array
(
=> Array
(
=> CCId
=> CCString
=> RadioButton1
)
=> Array
(
=> CCTop
=> CCInteger
=> 260
)
=> Array
(
=> CCLeft
=> CCInteger
=> 200
)
=> Array
(
=> CCWidth
=> CCInteger
=> 20
)
=> Array
(
=> CCHeight
=> CCInteger
=> 20
)
=> Array
(
=> CCEnabled
=> CCInteger
=> 1
)
=> Array
(
=> CCTabIndex
=> CCInteger
=> 0
)
)
)
=> Array
(
=> 7
=> CCImage
=> Array
(
=> Array
(
=> CCId
=> CCString
=> Image1
)
=> Array
(
=> CCTop
=> CCInteger
=> 300
)
=> Array
(
=> CCLeft
=> CCInteger
=> 200
)
=> Array
(
=> CCWidth
=> CCInteger
=> 28
)
=> Array
(
=> CCHeight
=> CCInteger
=> 30
)
=> Array
(
=> CCEnabled
=> CCInteger
=> 1
)
=> Array
(
=> CCTabIndex
=> CCInteger
=> 0
)
=> Array
(
=> CCSrc
=> CCInteger
=>
)
)
)
=> Array
(
=> 8
=> CCTime
=> Array
(
=> Array
(
=> CCId
=> CCString
=> Time1
)
=> Array
(
=> CCTop
=> CCInteger
=> 300
)
=> Array
(
=> CCLeft
=> CCInteger
=> 200
)
=> Array
(
=> CCWidth
=> CCInteger
=> 154
)
=> Array
(
=> CCHeight
=> CCInteger
=> 21
)
=> Array
(
=> CCEnabled
=> CCInteger
=> 1
)
=> Array
(
=> CCTabIndex
=> CCInteger
=> 0
)
=> Array
(
=> CCFormat
=> CCInteger
=>
)
)
)
)


终于想到了转型,即然输出的是正确的那么我们利用PHP的弱数据类型 的特点把它转型行不行呢?试了一下,果不其然。然后用循环把它输入到数组中保存,结果就是这样的,这种XML中有属性,有子节点,当也可以是更复杂的结构,可以以些类推。
页: [1]
查看完整版本: PHP把相对复杂结构的XML转换成数组。