Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [XML][PHP]Wydajne pobieranie ID lub marki/modelu produktu na podstawie nazwy
Forum PHP.pl > Forum > Przedszkole
patryk9200
Witam,

Mam plik XML o strukturze:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <agd><marka name="Samsung" m_id="1">
  3. <model name="SHC-100" p_id="0"></model>
  4. </marka>
  5. </agd>
  6. <rtv><marka name="LG" id="2">
  7. <model name="SCD210" p_id="0"></model>
  8. </marka>
  9. </rtv>
  10. </xml>

Zawiera on kilka tysięcy takich elementów.

Muszę stworzyć parę funkcji które:
-zwrócą ID modelu i jego marki produktu na podstawie nazwy modelu
-id marki na podstawie nazwy
-zwrócą markę/model produktu na podstawie id marki/modelu

Wolałbym nie robić tego na pętli foreach wielokrotnie zagnieżdżonej, odczuwalnie spada wydajność.
Ma ktoś pomysł/propozycję/przykład/sugestię wydajnego rozwiązania problemu?
dodam, że dopiero rozpoczynam zabawę z XML, zawsze wykorzystywałem do tego typu danych tablice, ale teraz dostałem z zewnątrz plik XML do przetworzenia
który będzie co parę dni aktualizowany.
Szukałem różnych rozwiązań ale nic ciekawego nie znalazłem.
erix
XPath?

Generalnie, jeśli to jest sporych rozmiarów XML, to wtedy pozostaje ręczny parser via XMLReader.
patryk9200
Znalazłem ciekawą stronę gdzie dokładnie jest opisana konstrukcja wyrażeń Xpath, dla zainteresowanych: YGREG.COM

Spróbuję na tej podstawie coś napisać.

problem rozwiązany, dzięki erix.

Rozwiązanie:
  1.  
  2. $xml = simplexml_load_file('./data.xml');
  3.  
  4. $result = $xml->xpath('/*/osobowe/marka[@id=2]'); //zwraca listę modeli według id marki
  5.  
  6. $result = $xml->xpath('/*/osobowe/marka[@name="Samsung"]'); // zwraca listę modeli według nazwy marki


dla reszty można zrobić identycznie, wydajność jest w miarę dobra.


mam jeszcze jedno pytanie, np. pobralem id modelu, jak pobrać id lub nazwę marki pod którą się znajduje?
Mój kod:
  1. $result = $xml->xpath('/*/agd/*/model[@name="SHC-100"');
  2. $return = $result[0]->attributes()->name;


jak zrobić, żeby można było szukać po nazwie niezależnie od wielkości znaków?
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-2025 Invision Power Services, Inc.