Efektywne wyszukiwanie w pliku XML

0

Mam plik XML w postaci:

<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:

$products = ['222'];

Obecnie korzystam z zachłannego rozwiązania:


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?

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...

0

Pozostaje przetestować, xpath jest prosty:

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

zobacz co będzie szybsze

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1