我正在尝试获取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方面还很陌生,所以我确定我走了一条错误的道路-任何帮助将不胜感激。
答案 0 :(得分:1)
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;
我正在获取数据,非常高兴的露营者。 再次感谢所有提供帮助的人:)
答案 1 :(得分:0)
您的问题最有可能是关于单个等号的错字
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;
}
您的第一个“如果”始终为 true 其他