Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [xml] problem z wyciągnięciem danych z podwójnego atrybutu
Forum PHP.pl > Forum > XML, AJAX > XML
caponne
Witam!

niestety nie mogę sobie poradzić z jedną rzeczą... chodzi o atrybuty w XML'u,
przegrzebałem neta... ale wszędzie są tutoriale bazujące na prostym wyciąganiu atrybutów.. wink.gif

mam takiego xmla o strukturze:

CODE

<Transfer>
<AdvData Action="A" ID="12334" InsDate="2012-03-19" ExpDate="2012-04-04">
<ContactData Firm="test" FirmID="11111" URL="www" categoryId="3000028,3000035" Description="aaaa" Contact="bbb" City="ccc">
<Email Data="ddd" />
<Phone Data="" />
<Fax Data="" />
</ContactData>
</AdvData>
</Transfer>


Oczywiście wpisów jest więcej i teraz moje pytanie:

Jak dobrać się do categoryID, ale w takiej postaci ala 'like' w SQLu:
Select * form ... like '%3000028%'


czyli zależy mi na wyszukaniu po konkretnym ID, nawet jeżeli w categoryId jest więcej danych po przecinku...
czyli najchętniej myśląc SQLem zastosowanie categoryID="%300028%" ;-)


Z wyciągnięciem danych gdy jest jedno categoryId sobie poradziłem:

CODE
  1. foreach ($xml->AdvData as $foo)
  2. {
  3. if($foo->AdvCnt['City']=='bleble' and ($foo->ContactData['categoryId']=='3000015' || $foo->ContactData['categoryId']=='3000018'))
  4. {
  5. $firma = "Firma: ".$foo->ContactData['Firm'];
  6. echo "Firma: ".$foo->ContactData['Firm'];


jednak kombinacje występują różne i zależałoby mi na wyszukiwaniu tylko konkretnego categoryID nawet gdy jest ich więcej przypisanych do danego categoryID.


byłbym wdzięczny za pomoc! smile.gif
tolomei
Witaj.

Można użyć funkcji strpos.
Wykorzystując Twój kod do utworzenia przykładu, wyglądałoby to tak:
  1. foreach ($xml->AdvData as $foo)
  2. {
  3. if($foo->AdvCnt['City']=='bleble' and (strpos($foo->ContactData['categoryId'], '3000015') !== false || strpos($foo->ContactData['categoryId'], '3000015') !== false))
  4. {
  5. $firma = "Firma: ".$foo->ContactData['Firm'];
  6. echo "Firma: ".$foo->ContactData['Firm'];


Tak jak możesz przeczytać w dokumentacji, funkcja ta zwraca pozycję w tekście, gdzie szukany tekst się zaczyna.
Funkcja może dać wynik równy 0(zero) co będzie oznaczało, że szukany kawałek znajduje się na początku tekstu.
Łatwo pomylić taki wynik z wynikiem false, gdy szukanego tekstu nie uda się odnaleźć.
Dlatego bardzo ważne jest aby przy porównaniach używać !== false lub === false.
Możesz także o tym przeczytać na czerwonym polu w dokumentacji.

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