simplexml_load_string 丢失标签的顺序
simplexml_load_string loses the order of tags
我有以下 XML:
<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 "input" 的数组和一个 2 "label" 的数组,但我不知道它们在 XML 中的顺序。
有办法得到那个订单吗?
So I get an array of ...
不,你不知道。 SimpleXML 是对象,不是数组;更重要的是,它是一个旨在用作 API 的对象,而不是具有固定属性的对象。当您使用 print_r
、var_dump
或类似的任何东西时,它表示自己好像是一个内部有一堆数组的对象,但实际上并不是这样。
它显示的原因是,如果您访问 $simplexml_object->input
,您可以按照它们出现的顺序遍历所有 <input>
元素,这通常很有用。
但是,要遍历所有元素,不管它们的标签名称如何,请使用 the ->children()
method and then check the name of each using the ->getName()
method,例如:
foreach ( $simplexml_object->children() as $node ) {
$tag_name = $node->getName();
$text_content = (string)$node;
}
我有以下 XML:
<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 "input" 的数组和一个 2 "label" 的数组,但我不知道它们在 XML 中的顺序。
有办法得到那个订单吗?
So I get an array of ...
不,你不知道。 SimpleXML 是对象,不是数组;更重要的是,它是一个旨在用作 API 的对象,而不是具有固定属性的对象。当您使用 print_r
、var_dump
或类似的任何东西时,它表示自己好像是一个内部有一堆数组的对象,但实际上并不是这样。
它显示的原因是,如果您访问 $simplexml_object->input
,您可以按照它们出现的顺序遍历所有 <input>
元素,这通常很有用。
但是,要遍历所有元素,不管它们的标签名称如何,请使用 the ->children()
method and then check the name of each using the ->getName()
method,例如:
foreach ( $simplexml_object->children() as $node ) {
$tag_name = $node->getName();
$text_content = (string)$node;
}