Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: DOM Wybór elementu wg numer
Forum PHP.pl > Forum > XML, AJAX > XML
rafalddd
Witam, potrzebuje pomocy.
Mam taki plik XML:

<?xml version="1.0" encoding="utf-8"?>
<produkty>
<produkt>
<nazwa>produkt 1</nazwa>
<rozmiar>30</rozmiar>
<kolor>20</kolor>
<cena>23.30</cena>
</produkt>
<produkt>
<nazwa>produkt 2</nazwa>
<rozmiar>15</rozmiar>
<kolor>10</kolor>
<cena>11.30</cena>
</produkt>
<produkt>
<nazwa>produkt 3</nazwa>
<rozmiar>15</rozmiar>
<kolor>12</kolor>
<cena>11.30</cena>
</produkt>
<produkt>
<nazwa>produkt 4</nazwa>
<rozmiar>15</rozmiar>
<kolor>12</kolor>
<cena>16.30</cena>
</produkt>
</produkty>


oraz mam taki plik PHP

<?php


$rekord = 1;
$kolor = 12;
$rozmiar = 15;


$produktyXML = new DOMDocument();
$produktyXML->load('produkty.xml');

$xpath = new DOMXPath($produktyXML);
$query = "produkt[rozmiar=$rozmiar and kolor=$kolor]";

$entries = $xpath->query($query);

# pokaz ilosc elementów w wyniku
echo $entries->length;

#pokaz wszystkie elementy z zapytania (wybrane)
foreach ($entries as $node){
echo $title = $node->getElementsByTagName("rozmiar")->item(0)->nodeValue;
$author = $node->getElementsByTagName("kolor")->item(0)->nodeValue;
echo "$title by $author\n";
}


#pokaz element wybrany na podstawie numeru z całości
$third = $produktyXML->getElementsByTagName('produkt')->item(0);
echo sprintf('Nazwa elementu to: <b>%s</b>',
$third->getElementsByTagName('rozmiar')->item(0)->nodeValue);


?>

to wszytko działa, ale problemem jest że nie umiem wybrać elementu np. pierwszego czy drugiego z tych wyników spełniających warunek, a które są uzyskane z xpath. umiem wyrzucić wszystkie za koleją, ale nie umiem tego wybranego. Umiem wybrany element ale tylko z tych, które są wszystkie razem, ale nie tych które spełniają warunek który im założyłem.

Może to banalne, ale dopiero uczę się php a z XML-em dopiero walczę od dwóch dni.

W całości chodzi o to, że skoro mam wczytane elementy spełniające jakiś tam warunek i znam ich ilość to mógłbym zrobić stronicowanie wyników np. po 10 sztuk.
Bo wybierał bym sobie: pokaz element 10, element 11 itp smile.gif
Noidea
$entries jest typu DOMNodeList. Do uzyskania konkretnego elementu użyj DOMNodeList.item
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.