Как мне разобрать этот большой XML-файл с XMLreader?

У меня есть XML-файл размером почти 200 МБ, поэтому я решил использовать XMLreader для извлечения необходимой мне информации.

Вот фрагмент XML в этом файле:

<product>
<manufacturer>Blue Widgets</manufacturer>
<price>6.79</price>
<condition>new</condition>
</product>
<product>
<manufacturer>Green Widgets</manufacturer>
<price>9.99</price>
<condition>new</condition>
</product>
<product>
<manufacturer>Black Widgets</manufacturer>
<price>3.29</price>
<condition>new</condition>
</product>
<product>
<manufacturer>Blue Widgets</manufacturer>
<price>14.99</price>
<condition>new</condition>
</product>

Из тысяч записей в этом большом файле мне нужна информация только от тех, чей производитель — «Голубые виджеты», но мне сложно понять, как изолировать только этого производителя:

$reader = new XMLReader();
$reader->open('test.xml');

$products = array();

while($reader->read()){

if($reader->nodeType == XMLREADER::ELEMENT && $reader->localName == 'manufacturer'){
$reader->read();
if($reader->value == 'Blue Widgets'){
//Now that we know the manufacturer is right, how do I advance to the next price node within this product element?
if($reader->nodeType == XMLREADER::ELEMENT && $reader->localName == 'price'){
$reader->read();

$products['price'] = $reader->value
}
}
}
}

0

Решение

Вы можете использовать XMLReader::next метод. Используя ваш пример:

...
$reader->read();
if ($reader->value == 'Blue Widgets') {
$reader->next('price'); // Advances cursor to the price node
}
...

Документация: http://php.net/manual/en/xmlreader.next.php

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]