за webdev - парсване на xml

Взаимопомощ, полезна информация и всичко, извън темата на останалите секции
Потребителски аватар
luciuz
Мнения: 919
Регистриран на: Пет 11 юни 2004 11:15
Автомобил:
Двигател:
Местоположение: София
Контакти:

за webdev - парсване на xml

Мнениеот luciuz » Вто 04 юли 2006 9:59


както всички знаят, във форума има доста програмисти, да да питам и аз:

Имам следния sample.xml file.
<section id="L11">
<group id="L21">
<field key="name1" value="1"/>
<field key="name2" value="2"/>
<field key="name3" value="3"/>
<field key="name4" value="4"/>
<field key="name5" value="5"/>
<field key="name6" value="6"/>
</group>

<group id="L22">
<field key="name7" value="7"/>
<field key="name8" value="8"/>
<field key="nam9" value="9"/>
</group>
</section>
<section id="L12">
<group id="L23">
<field key="name10" value="10"/>
<field key="name11" value="11"/>

</group>

<group id="L24">
<field key="name12" value="12"/>
<field key="name13" value="13"/>
<field key="nam14" value="14"/>
</group>
</section>


какво правя
<?php
$dom = new DomDocument();
$dom->preserveWhiteSpace = FALSE;
$dom->load('sample.xml');

$Level1 = $dom->getElementsByTagName('section');

foreach ($Level1 as $Level1v) {
$id = $Level1v -> getAttribute('id');
echo "$id <br />";
}

$Level2 = $dom->getElementsByTagName('group');

foreach ($Level2 as $Level2v) {
$id = $Level2v -> getAttribute('id');
echo "$id <br />";
}

$fd = $dom->getElementsByTagName('field');
foreach ($fd as $fds) {
$key = $fds -> getAttribute('key');
$value = $fds -> getAttribute('value');
echo "$key - $value<br />";
}

?>


и получавам:
List of all "section's" id
List of all "group's" id
List of all filed's key& value

а ми трябва да запазя същата структура, т.е.

section id=L11
---group id=L21
---------field key=name1 & value=1
---------field key=name2 & value=3
...
---group id=L22
---------field key=name7 & value=7
---------field key=name8 & value=8
...
section id=L12
---group id=L23
---------field key=name10 & value=10
---------field key=name11 & value=11
...
---group id=L24
---------field key=name12 & value=12
---------field key=name13 & value=13
(първа секция-> всички групи в тази секция-> всички полета в група от тази първа секция.
втора секция-> .......
трета .....
)
ще се раздвам някой да помогне .......




Потребителски аватар
wili98
Щраусолог
Мнения: 7566
Регистриран на: Вто 07 дек 2004 12:42
Автомобил:
Двигател:
Местоположение: София
Контакти:

Мнениеот wili98 » Вто 04 юли 2006 10:30


Кво значи да запазиш..структурата?

от ПХП не разбирам, ама потърси функции от сорта на NextSibling,
childNodes, parentNode, lastChild, firstChild...
тук чете ли?

на практика
въртиш цикъл да речем по секции..
след което на всеки обект секция на него му изстрелваш GetElementByTagName... и ги подпердашваш в цикъл...

getElementsByTagName('section')
for(всички елементи section)
{
for( Елемент_Section->getElementsByTagName('group');)
{
.....
}

}
прочети малко този документ..

getElementsByTagName трябва да върне DOMNodeList
което е array от DOMNode

така действат и гетЧилд...


Потребителски аватар
luciuz
Мнения: 919
Регистриран на: Пет 11 юни 2004 11:15
Автомобил:
Двигател:
Местоположение: София
Контакти:

Мнениеот luciuz » Сря 05 юли 2006 7:37


wili98 написа:
от ПХП не разбирам, ама потърси функции от сорта на ........

реших проблема с hasChildNodes() :)

$Level1 = $dom->getElementsByTagName('section');
foreach ($Level1 as $Level1v) {
$id = $Level1v -> getAttribute('id');
echo "$id <br />";
if($Level1v->hasChildNodes()) {
$Level2l = $Level1v->childNodes;
foreach($Level2l as $Level2v) {
$id = $Level2v -> getAttribute('id');
echo "--$id <br />";
if($Level2v->hasChildNodes()) {
$fd = $Level2v->childNodes;
foreach ($fd as $fds) {
$key = $fds -> getAttribute('key');
$value = $fds -> getAttribute('value');
echo "----$key - $value<br />";
}
}
}
}
}



Върни се в “ОФФ-Топик - други”

Кой е на линия

Потребители, разглеждащи този форум: Няма регистрирани потребители и 44 госта