#laravel #xml-parsing
Вопрос:
Я хочу проанализировать список пакетов, содержащий список изображений. Однако я могу получить первый элемент, но не полный массив. Синтаксический анализатор, который я использую, — это Оркестр Ларавеля.
XML, который нужно распаковать:
<Packages>
<Package>
<Pictures>
<P>20205520574081..jpg</P>
<P>20205520574701.jpg</P>
<P>20205520575172.jpg</P>
<P>20205520575483.jpg</P>
<P>20205520575955.jpg</P>
<P>20205520576426.jpg</P>
<P>20205520576897.jpg</P>
<P>20205520577368.jpg</P>
<P>20205520577989.jpg</P>
</Pictures>
</Package>
<Package>
<Pictures>
<P>20205520574081..jpg</P>
<P>20205520574701.jpg</P>
<P>20205520575172.jpg</P>
<P>20205520575483.jpg</P>
<P>20205520575955.jpg</P>
<P>20205520576426.jpg</P>
<P>20205520576897.jpg</P>
<P>20205520577368.jpg</P>
<P>20205520577989.jpg</P>
</Pictures>
</Package>
Мой код извлечения:
$OfferSummary = $xml->parse([
'Images' => ['uses' => 'Packages.Package.Picture[P]'],
]);
Мой результат:
["Images"]=>
array(1) {
[0]=>
array(1) {
["P"]=>
string(19) "20205520574081..jpg"
}
....
}
Пожалуйста, обратите внимание, что возвращается только первый элемент тега pictures, и мне нужен весь массив элементов.
Спасибо!
Ответ №1:
У меня была похожая проблема. В моем XML был список, в котором у каждого подузла был атрибут name. В моем случае я нашел ответ здесь: https://github.com/orchestral/parser/blob/master/tests/Feature/DocumentTest.php#L52
В моем случае решение было:
$parser = $xml->parse([
'products' => ['uses' => 'products.product[attributes.attribute_group.value(::name=@)]'],
]);