2013-03-31 40 views
0

您好我不知道是否有人知道一個腳本或功能,它可以格式化特定格式的XML文件的陣列,例如具有XML像這樣(但更長時間)PHP Dynmically格式的XML到PHP數組

<data> 
    <width>3.5</width> 
    <height>2</height> 
    <edge>.125</edge> 
    <safe>.125</safe> 
</data> 

<fold> 
    <show_lines></show_lines> 
    <type>online</type> 
</fold> 

<preview> 
    <name>testfile</name> 
    <location>testurl.com</location> 
</preview> 

<preview> 
    <name>myfile</name> 
    <location>someurl.com</location> 
    <special>frontandback</special> 
</preview> 

標識基本上要通過每個循環屬性檢查,如果有更多的這裏面等等等等,基本上創建一個陣列,它看起來像這樣

$array = [data] (
    width=>3.5 
    height=>2 
    edge=>.125 
    safe=>.125 
) 

[fold] (
    type=>online 
) 

[preview] (
    [0]=>(
     name=>testfile 
     location=>testurl.com 
    ) 
    [1]=>(
     name=>myfile 
     location=>someurl.com 
     special=>frontandback 
    ) 
) 

等所以基本上它將只抓取具有值的元素,並跳過那些不要和som的元素在XML電子部件可以有更多的孩子比其他部分,它應該抓住所有這些,如果不存在具有相同名稱的多個屬性,這將是它自己的陣列,每一個是它的內部

希望一個數組這是有道理的任何人都可以幫忙。進出口主要是想利用SimpleXML的,但可以使用anythign其他

+0

這可以幫助你:http://outlandishideas.co.uk/blog/2012/0 8/xml-to-json/ – SoldierCorp

+0

是的,這是可能的。它需要被編程。它已被編程(使用搜索)。你有什麼嘗試?你在哪裏碰到路障? – hakre

回答

1

對於簡單的文件,像在您的示例中總是有這樣(髒)招:

$arr = json_decode(json_encode(simplexml_load_string($xml)), 1); 

working example

輸出:

Array (
    [data] => Array (
     [width] => 3.5 
     [height] => 2 
     [edge] => .125 
     [safe] => .125 
    ) 
    [fold] => Array (
     [show_lines] => Array() 
     [type]  => online 
    ) 
    [preview] => Array (
     [0] => Array (
       [name]  => testfile 
       [location] => testurl.com 
     ) 
     [1] => Array (
       [name]  => myfile 
       [location] => someurl.com 
       [special] => frontandback 
     ) 
    ) 
) 
+0

也可能會添加 - 空字符串和數組都會滿足['empty()'](http://php.net/manual/en/function.empty.php) - 如果您確實需要刪除沒有值的所有節點之後可以運行並[[unset()'](http://php.net/manual/en/function.unset.php)。 – Emissary

+0

這種方法唯一的問題是,我得到兩個預覽對象,而不是一個兩個陣列 – Yeak

+0

@Yevo你確定...我的輸出非常符合你想問題的輸出,除了fold => show_lines在場?我只能看到一個預覽數組,它是一個2D數組? – Emissary