Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [xml] problem z wyciągnięciem danych z podwójnego atrybutu
caponne
post 23.03.2012, 19:10:28
Post #1





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 23.03.2012

Ostrzeżenie: (0%)
-----


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

Ten post edytował caponne 23.03.2012, 23:27:32
Go to the top of the page
+Quote Post
tolomei
post 31.03.2012, 19:48:24
Post #2





Grupa: Zarejestrowani
Postów: 450
Pomógł: 135
Dołączył: 18.11.2010
Skąd: Wschowa

Ostrzeżenie: (0%)
-----


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.

Ten post edytował tolomei 31.03.2012, 19:50:40


--------------------
“ Computers are good at following instructions, but not at reading your mind. ”
- Donald Knuth
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.04.2024 - 12:04