Я застрял со следующим. У меня есть файл 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 и повторить эти значения?