PHP XML阵列地狱

时间:2018-09-18 23:21:32

标签: php arrays xml

我正在尝试获取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方面还很陌生,所以我确定我走了一条错误的道路-任何帮助将不胜感激。

2 个答案:

答案 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 其他