I have an XML string as follows:
<?xml version="1.0" encoding="utf-8"?>
<document id="0" name="RegSimple" Version="0.1">
<Description>
Configuration document for simple registration of incidents.
This document will contain both the fixed and the user-defined fields to
show on the registration screen.
</Description>
<Fields>
<Textbox id="1" name="IncidentID" visibility="Hidden" width="500"
displayreadonly="False" />
<Comment id="200" height="10" name="c1" caption=" " />
<Header id="100" name="Header" caption="Description" />
<Radiobox id="2" name="Type" caption="Feedback type" width="500"
type="19" displayreadonly="true"></Radiobox>
<Textbox id="3" name="Description" caption="My feedback"
width="500" height="75" multiline="True" required="True"
displayreadonly="True" />
<Textbox id="4" name="Incident" caption="Title *" width="500"
height="25" multiline="False" required="True" displayreadonly="False" />
<Comment id="201" width="500" name="Comment2"
caption="* All messages are published with a short title that describes the feedback"
multiline="True" height="40" />
<Comment id="202" height="20" name="c1" caption=" " />
<Combobox id="5" name="Unit" caption="Unit" width="500" type="12"
required="True" displayreadonly="True"></Combobox>
<Combobox id="6" name="Country" caption="Country" width="500"
type="11" required="True" displayreadonly="True"></Combobox>
<Textbox id="7" name="Office" caption="Office" height="50"
width="500" multiline="True" displayreadonly="True" />
<Textbox id="8" name="Cause" caption="Cause" height="50"
width="500" multiline="True" displayreadonly="True" />
<Textbox id="9" name="Action" caption="Recommended actions"
height="50" width="500" multiline="True" displayreadonly="True" />
<Combobox id="10" name="Theme" caption="Theme" width="500"
type="3" required="True" displayreadonly="True"></Combobox>
<Header id="102" name="Time" caption="Date, Time and location" />
<Datetime id="11" name="Date" caption="Date" width="120"
displayreadonly="True" />
<Textbox id="12" name="Time" caption="Time" width="120"
displayreadonly="True" property="True" />
<Textbox id="13" name="Location" caption="Location" width="500"
displayreadonly="True" />
<Header id="103" name="info" caption="Contact information" />
<Textbox id="14" name="Name" caption="Name" width="500" tag="user.name"
displayreadonly="False" />
<Textbox id="15" name="E-Mail" caption="E-Mail" width="500"
tag="user.e-mail" displayreadonly="False" />
<Textbox id="16" name="Registered date" visibility="Hidden"
width="500" tag="system.date" displayreadonly="False" />
</Fields>
</document>
I want the elements in the XML to be parsed sequentially i.e in the order they appear in the original string. But using SimpleXMLElement
and simplexml_load_string
give arrays of similar elements as following:
object(SimpleXMLElement)[292]
public '@attributes' =>
array
'id' => string '0' (length=1)
'name' => string 'RegSimple' (length=9)
'Version' => string '0.1' (length=3)
public 'Description' => string '
Configuration document for simple registration of incidents.
This document will contain both the fixed and the user-defined fields to show on the registration screen.
' (length=178)
public 'Fields' =>
object(SimpleXMLElement)[293]
public 'Textbox' =>
array
0 =>
object(SimpleXMLElement)[294]
public '@attributes' =>
array
'id' => string '1' (length=1)
'name' => string 'IncidentID' (length=10)
'visibility' => string 'Hidden' (length=6)
'width' => string '500' (length=3)
'displayreadonly' => string 'False' (length=5)
1 =>
object(SimpleXMLElement)[298]
public '@attributes' =>
array
'id' => string '3' (length=1)
'name' => string 'Description' (length=11)
'caption' => string 'My feedback' (length=11)
'width' => string '500' (length=3)
'height' => string '75' (length=2)
'multiline' => string 'True' (length=4)
'required' => string 'True' (length=4)
'displayreadonly' => string 'True' (length=4)
2 =>
object(SimpleXMLElement)[299]
public '@attributes' =>
array
'id' => string '4' (length=1)
'name' => string 'Incident' (length=8)
'caption' => string 'Title *' (length=7)
'width' => string '500' (length=3)
'height' => string '25' (length=2)
'multiline' => string 'False' (length=5)
'required' => string 'True' (length=4)
'displayreadonly' => string 'False' (length=5)
public 'Comment' =>
array
0 =>
object(SimpleXMLElement)[295]
public '@attributes' =>
array
'id' => string '200' (length=3)
'height' => string '10' (length=2)
'name' => string 'c1' (length=2)
'caption' => string ' ' (length=1)
1 =>
object(SimpleXMLElement)[300]
public '@attributes' =>
array
'id' => string '201' (length=3)
'width' => string '500' (length=3)
'name' => string 'Comment2' (length=8)
'caption' => string '* All messages are published with a short title that describes the feedback' (length=75)
'multiline' => string 'True' (length=4)
'height' => string '40' (length=2)
2 =>
object(SimpleXMLElement)[301]
public '@attributes' =>
array
'id' => string '202' (length=3)
'height' => string '20' (length=2)
'name' => string 'c1' (length=2)
'caption' => string ' ' (length=1)
public 'Header' =>
array
0 =>
object(SimpleXMLElement)[296]
public '@attributes' =>
array
'id' => string '100' (length=3)
'name' => string 'Header' (length=6)
'caption' => string 'Description' (length=11)
1 =>
object(SimpleXMLElement)[308]
public '@attributes' =>
array
'id' => string '102' (length=3)
'name' => string 'Time' (length=4)
'caption' => string 'Date, Time and location' (length=23)
2 =>
object(SimpleXMLElement)[312]
public '@attributes' =>
array
'id' => string '103' (length=3)
'name' => string 'info' (length=4)
'caption' => string 'Contact information' (length=19)
public 'Radiobox' =>
object(SimpleXMLElement)[297]
public '@attributes' =>
array
'id' => string '2' (length=1)
'name' => string 'Type' (length=4)
'caption' => string 'Feedback type' (length=13)
'width' => string '500' (length=3)
'type' => string '19' (length=2)
'displayreadonly' => string 'true' (length=4)
public 'Combobox' =>
array
0 =>
object(SimpleXMLElement)[302]
public '@attributes' =>
array
'id' => string '5' (length=1)
'name' => string 'Unit' (length=4)
'caption' => string 'Unit' (length=4)
'width' => string '500' (length=3)
'type' => string '12' (length=2)
'required' => string 'True' (length=4)
'displayreadonly' => string 'True' (length=4)
1 =>
object(SimpleXMLElement)[303]
public '@attributes' =>
array
'id' => string '6' (length=1)
'name' => string 'Country' (length=7)
'caption' => string 'Country' (length=7)
'width' => string '500' (length=3)
'type' => string '11' (length=2)
'required' => string 'True' (length=4)
'displayreadonly' => string 'True' (length=4)
In this result all the Textbox elements are returned in a single array. Similarly all comments and Comboboxes are returned in separate arrays irrespective of there order in the original XML.
Can anyone tell me how to parse the elements in their actual order? Thanks.