SimpleXML: как получить значение узла с условием на правило разбора?

У меня есть файл XML, который был сгенерирован внешней сущностью, которую я хочу проанализировать с помощью SimpleXML. Моя проблема в том, что в отображении, заданном клиентом, у меня есть некоторые условия для получения информации, которую я хочу.

Например, отображение для клиентского кода выглядит примерно так: E1ADRM1\PARTNER_Q=OSO\E1ADRE1\EXTEND_D что означает, что код для клиента является значением EXTEND_D тег, который вложен в один из множества PARTNER_Q теги. Тот, который имеет OSO значение.

Сегодня я начинаю изучать SimpleXML, поэтому понятия не имею, как получить эту информацию.

Из того, что я читал до сих пор, довольно просто получить информацию об узле и получить доступ к его свойствам. Если я один PARTNER_Q и никаких условий, мой $clientCode было бы $xml->E1ADRM1->PARTNER_Q->E1ADRE1->EXTEND_D (право?)

Любой намек на то, как я могу получить информацию с этим PARTNER_Q=OSO состояние в виду?

Заранее спасибо.

1 ответ

Для дальнейшего использования я оставлю здесь код с тем, как я это решил. Я основал свой код на этом хорошо написанном ответе, который я нашел.

$root = $xml->IDOC;
$shippingPoints = array();
// Go through the list of OTs       
foreach($root->E1EDL20 as $ot) {

    // Instanciate empty OT
    $otInfo = emptyOt();
    $otInfo["refOt"] = trim($ot->VBELN);

    // Go through partner to get the wanted items
    foreach ($ot->E1ADRM1 as $partner) {
            switch ($partner->PARTNER_Q) {
                    case "OSO":
                            $otInfo["codeLoader1"] = trim($partner->E1ADRE1->EXTEND_D);

                            break;
                    case "OSP":
                            $otInfo["refShip"] = trim($partner->PARTNER_ID);
                            // get the shipping info if not already fetched
                            if(!isset($shippingPoints[$otInfo["refShip"]])) {
                                    $shippingPoints[$otInfo["refShip"]] = Whouses::getWhouseAddressByCode($otInfo["refShip"]);
                            }
                            // assign values
                            $otInfo["brandNameShip"] = $shippingPoints[$otInfo["refShip"]]["name"];
                            $otInfo["addrShip1"] = $shippingPoints[$otInfo["refShip"]]["address"];
                            $otInfo["cityShip"] = $shippingPoints[$otInfo["refShip"]]["city"];
                            $otInfo["zipShip"] = $shippingPoints[$otInfo["refShip"]]["zipcode"];
                            $otInfo["countryShip"] = $shippingPoints[$otInfo["refShip"]]["country"];

                            break;
                    case "WE":
                            $otInfo["refDeliv"] = trim($partner->PARTNER_ID);
                            $otInfo["addrDeliv1"] = trim($partner->STREET1);
                            $otInfo["cityDeliv"] = trim($partner->CITY1);
                            $otInfo["zipDeliv"] = trim($partner->POSTL_COD1);
                            $otInfo["countryDeliv"] = trim($partner->COUNTRY1);
                    default:
                            // do nothing
                            break;
            }
    }

    // Go through the dates info to get the wanted items
    foreach ($ot->E1EDT13 as $qualf) {
            switch ($qualf->QUALF) {
                    case "006":
                            $dtDeliv = trim($qualf->NTANF);
                            $timeDeliv = trim($qualf->NTANZ);
                            $otInfo["initialDtDeliv"] = convertToOtDateFormat($dtDeliv, $timeDeliv);

                            break;
                    case "007":
                            $initialDtShip = trim($qualf->NTANF);
                            $timeInitialDtShip = trim($qualf->NTANZ);
                            $otInfo["initialDtShip"] = convertToOtDateFormat($initialDtShip, $timeInitialDtShip);

                            break;
                    default:
                            // do nothing
                            break;
            }
    }
}

Надеюсь, это кому-нибудь поможет!

Другие вопросы по тегам