Извлечение данных из XML вкл. детей и отображения на странице с помощью переполнения стека

У меня есть XML со следующей структурой:

<item>
<attributes>
<attribute datatype="text">
<name><![CDATA[name]]></name>
<value><![CDATA[Product Name]]></value>
</attribute>
<attribute datatype="text">
<name><![CDATA[sku]]></name>
<value><![CDATA[PRODUCTSKU]]></value>
</attribute>
<attribute datatype="numeric">
<name><![CDATA[price]]></name>
<value>10000</value>
</attribute>
<attribute datatype="numeric">
<name><![CDATA[eancode]]></name>
<value>123456789</value>
</attribute>
</attributes>
</item>

Теперь здесь я ищу следующий вывод:

Product Name : PRODUCTSKU : 10000 : 123456789

Но со следующим кодом я извлекаю все детали в атрибут узел, но я не могу отделить значения SUB NODES …

$reader = new XMLReader();
$reader->open( 'test.xml' );
$id = 'attributes';
while ($reader->read()) {
if ($reader->nodeType == XMLReader::ELEMENT) {
$exp = $reader->expand();
if ($exp->nodeName == $id)
echo "<b>" . $exp->nodeName . " : </b>" . $exp->nodeValue . "<br />";

}
}

Я также попробовал это с DOMDOcument также:

$xml = new DOMDocument();
$xml->load('test.xml');
$root = $xml->documentElement;
foreach($root->childNodes as $node){

//print $node->nodeName.' - '.$node->nodeValue;
print $node->nodeValue;
}

Но это также отображает все подузлы вместе … Я хочу разделить их и сохранить в БД … Пожалуйста, помогите мне с этим … Я борюсь с этим тихим долго

0

Решение

Проще в использовании SimpleXML но если вы хотите использовать XMLReader попробуй это:

$values = array();
$reader = new XMLReader();
$reader->open( 'test.xml' );
$id = 'attribute';
while ($reader->read()) {
if ($reader->nodeType == XMLReader::ELEMENT) {
$exp = $reader->expand();
if ($exp->nodeName == "item") {
if (count($values)) print implode(" : ", $values);
$values = array();
}
if ($exp->nodeName == $id) {
foreach ($exp->childNodes as $node) {
if ($node->nodeName == "value") {
$values[] = $node->textContent;
}
}
}
}
}
if (count($values)) print implode(" : ", $values);
2

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

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

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