Цикл по дочерним узлам с несколькими элементами - PullRequest
0 голосов
/ 10 июля 2020

Я застрял со следующим. У меня есть файл XML с пространством имен CB C. В этом XML несколько узлов ca c: InvoiceLines. Я хочу пропустить через них l oop, чтобы отобразить значения в соответствующих местах счета.

Я загружаю файл XML следующим образом:

$xml_file = 'INV-120024175_CUS-1000637-multiple_orders.XML';
$xmlfile = file_get_contents( $xml_file );
$ob = simplexml_load_string($xmlfile, 'SimpleXMLElement', LIBXML_NOCDATA);

Я перехожу по этой ссылке чтобы выяснить, как выполнить l oop через элемент: Получение значений от XML до PHP с несколькими пространствами имен . Из этого примера я создал следующий код:

 //Init the array
    $string_test = [];

    foreach($ob->xpath('//cac:InvoiceLine') as $invoice)
    {
        $string_ID = (string)$invoice->children('cbc', true)->ID.PHP_EOL;
        $string_test [$string_ID]['ID'] = (string)$invoice->children('cbc', true)->ID.PHP_EOL;
        $string_test [$string_ID]['Note'] = (string)$invoice->children('cbc', true)->Note.PHP_EOL;
        $string_test [$string_ID]['InvoicedQuantity'] = (string)$invoice->children('cbc', true)->InvoicedQuantity.PHP_EOL;
        $string_test [$string_ID]['LineExtensionAmount'] = (string)$invoice->children('cbc', true)->LineExtensionAmount.PHP_EOL;
        
        //Non working code to get the contents of the item node...
        $item = $invoice->xpath('//cac:Item');

        $array = json_decode(json_encode($item), TRUE);
        #print_r($array);

        //echo "<br>" . (string)$item->children('cbc', true)->Name.PHP_EOL;
        
        
       
    }
    //Print the full array
    foreach($string_test as $string){
           print_r($string);
    }

Для элементов верхнего уровня в файле XML следующее работает как шарм. Но я застрял на следующем: в каждом узле ca c: InvoiceLine есть другие узлы ca c:, например:

 <cac:Item>
      <cbc:Name>JAL--B:910 x H:1660-LK-Profit12VTiltOnly50mm-30.10</cbc:Name>
      <cac:SellersItemIdentification>
        <cbc:ID>CPR-120101560</cbc:ID>
      </cac:SellersItemIdentification> 

Как можно il oop через узел Item внутри узел InvoiceLine и повторить эти значения?

...