Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [XML][PHP] SimpleXML - jak dostać się do środka
Marcstee
post
Post #1





Grupa: Nieautoryzowani
Postów: 42
Pomógł: 0
Dołączył: 15.12.2009

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


Hej

Mam dość rozbudowany plik XML i musze go przerobić. Załóżmy że w uproszczeniu wygląda tak:

  1. <nod1>
  2. <xxx>
  3. </xxx>
  4. <yyy>
  5. <aaa>
  6. <bbb>
  7. <ccc>
  8. </ccc>
  9. </bbb>
  10. </aaa>
  11. <aaa>
  12. <bbb>
  13. <ccc>
  14. </ccc>
  15. </bbb>
  16. </aaa>
  17. </yyy>
  18. </nod1>


I teraz musze sobie zapisać do jakieś zmiennej wszystko co jest w <aaa> i potem na tym pracować (zmieniać na przykład bbb na "table" i wywalać atrybuty itp). Jak jednak zapisąć to co jest między tymi aaa do zmiennej?? Bo próbuje z tym simpleXML ale nie wychodzi za cholere.

Bardzo prosze o jakąś pomoc
Go to the top of the page
+Quote Post
tvister
post
Post #2





Grupa: Zarejestrowani
Postów: 253
Pomógł: 29
Dołączył: 18.08.2008

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


Cytat
Jak jednak zapisąć to co jest między tymi aaa do zmiennej??


Możesz pobawić się preg_match .
Druga metoda, która nie wiem czy zadziała i raczej nie będzie zbyt uniwersalna(przed chwilą wymyśliłem) :
strip_tags($tekst,'<aaa>,<bbb>,<ccc>') (IMG:style_emoticons/default/smile.gif)

Ten post edytował tvister 25.01.2010, 17:05:35
Go to the top of the page
+Quote Post
Marcstee
post
Post #3





Grupa: Nieautoryzowani
Postów: 42
Pomógł: 0
Dołączył: 15.12.2009

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


Poki co jakoś wyciąłem sobie to ale w mało praktyczny sposób (substringiem). Fajnie jednak było by mieć tablice w której jest coś takiego:
$tab[0] => to co jest miedzy pierwszymi aaa
$tab[1] => to co jest miedzy drugimi aaa
itd. Dzieki temu ułatwiło by to całość tego co musze zrobić i to znacząco. Czy php ma jakies wbudowane funkcje do tego celu? Czy nie bardzo. Bo jakoś nie wiem jak się zabrać za to aby działało tak jak opisałem.
Go to the top of the page
+Quote Post
230005
post
Post #4





Grupa: Zarejestrowani
Postów: 316
Pomógł: 36
Dołączył: 2.04.2008

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


Dam ci kod, który zaproponowałem w innym temacie:

  1.  
  2. $array = array();
  3.  
  4. $xml = new DOMDocument();
  5. //to niżej to po to żeby nie uwzględniał białych znaków przy czytaniu
  6. $xml->preserveWhiteSpace = false;
  7. $xml->Load('xml.xml');
  8.  
  9. $xp = new DOMXpath($xml);
  10. $names = $xp->query('/*');
  11.  
  12. foreach($names as $vals) {
  13. $array[] = $vals->nodeValue;
  14. }


Poczytaj sobie w manualu o DOMDocument i DOMXpath.
Go to the top of the page
+Quote Post
piotrooo89
post
Post #5


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




DOMDocument niby fajny ale... SimpleXML realizuje to o wiele szybciej.
Go to the top of the page
+Quote Post
230005
post
Post #6





Grupa: Zarejestrowani
Postów: 316
Pomógł: 36
Dołączył: 2.04.2008

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


Bardzo możliwe, ale czy jest tak wygodne? Poza tym dopóki plik nie będzie ważył nie wiadomo ile, to czy ta szybkość jest tak istotna?
Go to the top of the page
+Quote Post
piotrooo89
post
Post #7


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




wygodne jest bo SimpleXML sam w sobie jest prosty. Czy ja wiem czy będzie to aż tak mało? DOM wczytuje wszystkie gałęzie i później na nich działa, a za pomocą Simple odnosisz się tylko do wybranych.
Go to the top of the page
+Quote Post
Marcstee
post
Post #8





Grupa: Nieautoryzowani
Postów: 42
Pomógł: 0
Dołączył: 15.12.2009

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


Wiecie... wszystko fajnie dopóki nie zależy nam tylko na wartościach zawartych między znacznikami. A mi zależy aby mieć wycięte i zapisane w jakiś string wartości wraz z znacznikami. Żeby ten string wyglądał jakoś tak: "<bbb><ccc>WARTOSC</ccc></bbb>".
Go to the top of the page
+Quote Post

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: 23.08.2025 - 07:14