Efektywne wyszukiwanie w pliku XML

Efektywne wyszukiwanie w pliku XML
artur_waw
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 155
0

Mam plik XML w postaci:

Kopiuj
<offers>
  <offer>
    <param name="product_code">AAA</param>
    <param name="name">Produkt 1</param>
    <param name="ean">111</param>
  </offer>
  <offer>
    <param name="product_code">BBB</param>
    <param name="name">Produkt 2</param>
    <param name="ean">222</param>
  </offer>
  <offer>
    <param name="product_code">CCC</param>
    <param name="name">Produkt 3</param>
    <param name="ean">333</param>
  </offer>
<offers>

Chciałbym z niego wyciągnąć wszystkie takie wartości ean i name, dla których wartości ean istnieją w zdefiniowanej tablicy kodów:

Kopiuj
$products = ['222'];

Obecnie korzystam z zachłannego rozwiązania:

Kopiuj

foreach($offers->offer as $offer) {
  foreach($offer->param as $param) {
    if($param['name'] == "ean" && in_array($param['name'], $products)) {
      // do something here
  }
}

Czy skorzystatanie z SimpleXMLElement::xpath, będzie optymalnym rozwiązaniem czy można to zrobić szybciej?

katakrowa
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Chorzów
  • Postów: 1670
0

To zależy od wielkości pliku. Jeśli się plik zmieści w dostępnym dla PHP RAM to nie powinno być problemu.
A szybciej oczywiście, że można - pytanie czy potrzeba...

PA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3897
0

Pozostaje przetestować, xpath jest prosty:

Kopiuj
/offers/offer[param/@name="ean" and param = ("111", "222") ]

zobacz co będzie szybsze

HA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1019
0

Jeśli plik jest jakiś bardzo duży i sporo operacji na nim wykonujesz to opcją jest jego cachowanie np. do jakiejś bazy nosql. Z bardziej banalnych rozwiązań to można w sumie zapisać jako tablicę do pliku i zamiast działać na xml po prostu wczytywać taką tablicę, żeby za każdym razem nie mielić xml. Rozwiązań na optymalizację jest sporo, ale wszystko zależy od wielkości pliku, częstości aktualizacji i częstości wyszukiwania.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.