У меня есть следующий 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 «входных данных» и массив из 2 «меток», но я не знаю, в каком порядке они были в XML.
Есть ли способ получить этот заказ?
Итак, я получаю массив …
Нет, ты не SimpleXML — это объект, а не массив; более того, это объект, предназначенный для использования в качестве API, а не объект с фиксированными свойствами. Когда вы используете print_r
, var_dump
или что-то в этом роде, он представляет себя как объект с кучей массивов внутри, но на самом деле это не то, что происходит.
Это показывает, что если вы получаете доступ $simplexml_object->input
Вы можете просмотреть все <input>
элементы, в порядке их появления, что часто бывает полезно.
Однако, чтобы перебрать все элементы, независимо от их имени тега, используйте ->children()
метод а затем проверьте имя каждого использования ->getName()
метод, например.:
foreach ( $simplexml_object->children() as $node ) {
$tag_name = $node->getName();
$text_content = (string)$node;
}
Других решений пока нет …