Я пытаюсь получить данные массива XML. Вот данные, которые я ввел:
[MyCallResult] => SimpleXMLElement Object
(
[errorMessage] => SimpleXMLElement Object
(
)
[arrayAvailableField] => SimpleXMLElement Object
(
[MyCall.output.AvailableField] => Array
(
[0] => SimpleXMLElement Object
(
[fieldName] => orderno
[fieldValue] => 10314451
[sequenceNumber] => 1
)
[1] => SimpleXMLElement Object
(
[fieldName] => ordersuf
[fieldValue] => 00
[sequenceNumber] => 2
)
[2] => SimpleXMLElement Object
(
[fieldName] => custno
[fieldValue] => 16137
[sequenceNumber] => 3
И это касается еще 30+ полей. Я хочу пройти через цикл и выбрать то, что мне нужно, с помощью чего-то вроде оператора IF (если $ node-> fieldname = "orderno", то $ orderno = $ node-> fieldValue)
Я могу выполнить цикл foreach и получить все значения, но я не могу получить оператор if, чтобы все продолжалось (например, if находит совпадение и выходит из цикла).
Вот кое-что, что я пробовал:
foreach ($xml->MyCall->arrayAvailableField-> "MyCall.output.AvailableField"} as $node) {
if ($node['fieldName'] = "orderno") {
$ordno = $node->fieldValue;
} elseif ($node['fieldname'] = "ordersuf") {
$ordersuf = $node->fieldValue;
}
}
По крайней мере, я получил первый заказ - нет - а остальные не удалось.
Я новичок в PHP, поэтому уверен, что иду по неправильному пути - любая помощь будет принята с благодарностью.
Привет, в подобных вопросах лучше всего предоставить минимальный воспроизводимый пример - то есть небольшой фрагмент кода в самом вопросе, который мы можем скопировать и вставить, чтобы воспроизвести проблему самостоятельно. В случае XML, вместо отображения вывода print_r или var_dump, включите небольшой раздел самого XML; тогда кому-то будет проще поиграть с разными способами доступа к нему.






Скорее всего, ваша проблема связана с опечаткой вокруг единственного знака равенства
if ($node['fieldName'] = "orderno") {
$ordno = $node->fieldValue;
} elseif ($node['fieldname'] = "ordersuf") {
$ordersuf = $node->fieldValue;
}
Измените его, чтобы использовать двойное равенство:
if ($node['fieldName'] == "orderno") {
$ordno = $node->fieldValue;
} elseif ($node['fieldname'] == "ordersuf") {
$ordersuf = $node->fieldValue;
}
ваше первое «если» всегда правда в противном случае
FWIW, я нашел ответ - может быть, не элегантно, но работает. Вот что у меня получилось:
$x = $xml->xpath("//MyCall.output.AvailableField");
for ($y = 0; $y <= count($x)-1; $y++) {
switch (trim($x[(int)$y]->fieldName)) {
case "orderno": $orderno = $x[(int)$y]->fieldValue; break;
case "ordersuf": $ordersuf = $x[(int)$y]->fieldValue; break;
case "custno": $custno = $x[(int)$y]->fieldValue; break;
Я получаю данные, так счастлив турист. Еще раз спасибо всем, кто помогал :)
Как я уже сказал - новинка на этом сайте :)
дважды проверьте использование знака равенства ... например,
$node['fieldName'] = "orderno"должен быть$node['fieldName'] == "orderno", это может быть простая опечатка :)