Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][XML] Dostęp do taga po atrybucie
masahuku
post
Post #1





Grupa: Zarejestrowani
Postów: 42
Pomógł: 4
Dołączył: 11.12.2009

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


Witam,

Mam pewien problem. Piszę dość dużą aplikację korzystającą z pliku XML dostarczanego przez zew. firmę (wolę pracować na bazach, jednak wola zleceniodawcy żeby działało na XML'u). Jednak XML jest dość dziwnie skonstruowany.

  1. <param nazwa="typ_wlasnosci" typ="text">xxx</param>
  2. <param nazwa="wojewodztwo" typ="text">xxx</param>
  3. <param nazwa="miasto" typ="text">xxx</param>


Wydaje się proste jednak w niektórych obiektach pojawiają się dodatkowe znaczniki <param> o innych nazwach więc praca na "indeksach" jest niemożliwa. Za pomocą xpatha wybieram sobie interesujące mnie nody, jednak nie wiem jak z tych nodów wybrać dalej parametr o zadanym atrybucie nazwa. W parakodzie (chciałbym żeby tak działało ale nie działa (IMG:style_emoticons/default/tongue.gif) ):

  1. $rekord->param[nazwa[wojewodztwo]];
zamiast
  1. $rekord->param[10];


Czyli chcę pobrać wartosc parametru o nazwie wojewodztwo. Myślałem o ponownym wykorzystaniu xpatha, ale obiawiam się, że przy takiej ilości "odbiegnięć" od normy może mi sie przesadnie to skomplikować. Wiecie może jak coś takiego zrobić ?

Do xmla dostaje się przez SimpleXML, a $rekord to obiekt powstający przez foreacha z $rekordy = $xml->xpath(warunki).

Pozdrawiam,
masahuku

Ten post edytował masahuku 9.02.2010, 02:36:58
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
masahuku
post
Post #2





Grupa: Zarejestrowani
Postów: 42
Pomógł: 4
Dołączył: 11.12.2009

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


Mam plik xml w postaci:

  1. <OBIEKT tab="" typ="">
  2. <param nazwa="costam1">tresc</param>
  3. <param nazwa="costam2">tresc</param>
  4. <param nazwa="costam3">tresc</param>
  5. <param nazwa="costam4">tresc</param>
  6. <param nazwa="costam5">tresc</param>
  7. </OBIEKT>
  8. <OBIEKT tab="" typ="">
  9. <podobiekt>
  10. <param nazwa="costam1">tresc</param>
  11. <param nazwa="costam2">tresc</param>
  12. <param nazwa="costam6">tresc</param>
  13. <param nazwa="costam3">
  14. <linia>tresc</linia>
  15. </param>
  16. <param nazwa="costam4">tresc</param>
  17. <podobiekt>
  18. </OBIEKT>


Chodzi o to że parametry nie są takie same dla wszystkich obiektów więc nie mogę zrobić ->param[x] (bo nie zawsze jest na tej samej pozycji). A potrzebuję tego, bo chce stworzyć listę obiektów i dopiero z niej to obsługiwać (te parametry nie-stałe nie są mi np. w ogóle potrzebne).

$rekordy=$xml->xpath("//OBIEKT[@tab='".$_tab."' and @typ='".$_typ."']/podobiekt"); - z tego otrzymuje tablice wszystkich podobiektów. Następnie chcę jakoś uzykać dostęp do np. param nazwa="costam3"->linia;

Póki co zrobiłem tak i działa ale nie wiem czy to poprawny tok myślenia:
  1. $rekordy=$xml->xpath("//OBIEKT[@tab='".$_tab."' and @typ='".$_typ."']/podobiekt | //OBIEKT[@tab='".$_tab."' and @typ='".$_typ."']/podobiekt/param[@nazwa="costam3"]);


i dzięki temu mam dostęp do wszystkich parametrów a $rekord->linia odowłuje się już bezpośrednio do paramateru o nazwie costam3. Problem jest taki że tych parametrów jest dużo - czy tak rozbudowany xpath nie zwariuje ? (IMG:style_emoticons/default/smile.gif) Jak na moje to jest coś prostego ale normalnie wyjdę z siebie zaraz.

Ten post edytował masahuku 9.02.2010, 13:27:15
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 9.06.2026 - 12:53