2015-04-17 64 views
0

的順序,我有以下XML:simplexml_load_string失去的標籤

<mobapp>  
    <form> 
     <input type="text" name="target" id="target" value="" maxlength="8" required="true" pattern="[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]"/> 
     <label for="target"> Phone number</label> 
     <input type="number" name="amount" id="amount" min="0" maxlength="16" required="true"/> 
     <label for="amount"> Amount to load:</label> 
    </form> 
</mobapp> 

當我使用simplexml_load_string($theXML)我得到如下:

object(SimpleXMLElement)#150 (3) { 
    ["input"]=> 
    array(2) { 
    [0] => object(SimpleXMLElement)#146 (1) { 
     ["@attributes"]=> [... removed for brevity ...] 
    } 
    [1] => object(SimpleXMLElement)#146 (1) { 
     ["@attributes"]=> [... removed for brevity ...] 
    } 
} 
["label"]=> 
    array(2) { 
    [0] => [... removed for brevity ...] 
    [1] => [... removed for brevity ...] 

} 

(我刪除了所有的屬性,使之更容易理解)

所以我得到一個2「輸入」數組和2個「標籤」數組,但我不知道它們在XML中的順序。

有沒有辦法獲得該訂單?

+0

據我所知,'的keys' XML數組就是標籤。所以,如果你有4個'

+0

順便說一句,我不知道這是否發生在你複製代碼時,但檢查出你的xml代碼的結尾:'',而它應該是'' –

+0

@OfirBaruch不,它們實際上不是「in」關鍵在於,並沒有真正的陣列;這只是調試輸出顯示的方式(以及您可以*訪問它們的一種方式)。 – IMSoP

回答

5

所以我得到的數組...

不,你不知道。 SimpleXML是一個對象,而不是一個數組;更重要的是,這是一個旨在用作API的對象,而不是具有固定屬性的對象。當你使用print_r,var_dump或其他類似的東西時,它表示自己就好像是一個內部有一堆數組的對象,但實際上並不是這樣。

它顯示的原因是,如果您訪問$simplexml_object->input,則可以按照它們出現的順序遍歷所有<input>元素,這通常很有用。

然而,通過所有的元素循環,不管他們的標籤名稱,使用the ->children() method然後檢查使用the ->getName() method各的名稱,例如:

foreach ($simplexml_object->children() as $node) { 
    $tag_name = $node->getName(); 
    $text_content = (string)$node; 
} 
+0

每天我都會學到新東西,很高興知道:) –