Пропускать элементы, используя xmlreader Stack Overflow

Я использую xmlReader для анализа большого файла XML (~ 100 МБ). Что-то вроде этого

    <?xml version="1.0" encoding="ISO-8859-1"?>
<products>
<product>
<element_1>foo</element_1>
<element_2>foo</element_2>
<element_3>foo</element_3>
<element_4>foo</element_4>
</product>
<product>
<element_1>bar</element_1>
<element_2>bar</element_2>
<element_3>bar</element_3>
<element_4>bar</element_4>
</product>
<product>
<element_1>bar</element_1>
<element_2>bar</element_2>
<element_3>bar</element_3>
<element_4>bar</element_4>
</product>
<product>
<element_1>bar</element_1>
<element_2>bar</element_2>
<element_3>bar</element_3>
<element_4>bar</element_4>
</product>
<product>
<element_1>bar</element_1>
<element_2>bar</element_2>
<element_3>bar</element_3>
<element_4>bar</element_4>
</product>
</products>

Как нам пропустить первые два дерева и перейти к третьему?

0

Решение

XMLReader проходит через ваш файл построчно. Поскольку у вас нет идентификаторов (атрибутов) в вашем xml-файле, вы можете использовать решение для устранения проблем, пропустив продукт 1 и 2 с помощью «next ()»:

$xmlReader = new XMLReader;

// try to open
if (!$xmlReader->open($file)) {
die("Failed to open file");
}

// read the file
while($xmlReader->read()) {

// skip 1st product
if($xmlReader->nodeType == XMLReader::ELEMENT && $xmlReader->name == "product") {$xmlReader->next("product");}
// skip 2nd product
if($xmlReader->nodeType == XMLReader::ELEMENT && $xmlReader->name == "product") {$xmlReader->next("product");}

// start reading
if($xmlReader->nodeType == XMLReader::ELEMENT && $xmlReader->name == "product") {
// use your code here

// personally I like using simplexml from here since its easier to work with and the nodes are usually small enough
$node = simplexml_load_string($xmlReader->readOuterXML());

// use it
$myNewElement1 = $node->element_1;
$myNewElement2 = $node->element_2;
$myNewElement3 = $node->element_3;
$myNewElement4 = $node->element_4;
}
}

Также перейдите к http://php.net/manual/en/xmlreader.next.php

0

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

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

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