Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> parser xml, zagłębianie sie
Fixus
post 17.08.2010, 11:10:13
Post #1





Grupa: Zarejestrowani
Postów: 295
Pomógł: 9
Dołączył: 8.02.2006

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


Witam,
mam problem. Piszę parser xml`a i zastanawiam się w jaki sposób zrobić zagnieżdząnie. Chodzi mi o to, że mogę mieć x poziomów zagnieżdżenia. Jak aplikacja ma automatycznie to robić. To znaczy nie chce pisać tyle pętli ile zagnieżdżeń tylko, żeby sam to sprawdzam czy jest zagnieżdżenie n-tego stopnia. Jak jest to wchodzi i sprawdza czy jest n+1 stopnia. Jak jest to wchodzi i tak dalej
Go to the top of the page
+Quote Post
wookieb
post 17.08.2010, 11:13:51
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




A dlaczego piszesz WŁASNY parser xml? Jakie są założenia?

Ten post edytował wookieb 17.08.2010, 11:14:06


--------------------
Go to the top of the page
+Quote Post
erix
post 17.08.2010, 11:14:24
Post #3





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Rekurencja?

Poza tym, jak korzystasz z xml reader, to masz przecież tę samą funkcję wywoływaną dla każdego węzła. Sprawdzasz, jaki to węzeł, jeśli otwarcie -> zwiększasz zmienną, zamknięcie -> zmniejszasz.

Ale to rozważania w ciemno. winksmiley.jpg


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
Fixus
post 17.08.2010, 12:53:07
Post #4





Grupa: Zarejestrowani
Postów: 295
Pomógł: 9
Dołączył: 8.02.2006

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


// edit
tu były głupoty, że aż mi smutno się robi dlatego już ich nie ma

pewnie istotnym faktem będzie wspomnienie, że chce wygenerować drzewo na podstawie tego xml`a winksmiley.jpg

coś nie tak kumam. Korzystam z xml reader`a i mam taki kodzik

  1. $xml = new XMLReader;
  2. $xml->open('xml.xml');
  3.  
  4. $doc = new DOMDocument;
  5.  
  6. // move to the first <product /> node
  7. while ($xml->read() && $xml->name !== 'HASLO');
  8.  
  9. // now that we're at the right depth, hop to the next <product/> until the end of the tree
  10. while ($xml->name === 'HASLO')
  11. {
  12. // either one should work
  13. //$node = new SimpleXMLElement($xml->readOuterXML());
  14. $node = simplexml_import_dom($doc->importNode($xml->expand(), true));
  15.  
  16. // now you can use $node without going insane about parsing
  17. // print_r($node->HASLO);
  18.  
  19. //echo $xml->getAttribute($node->HASLO->POZIOM);
  20.  
  21. // go to next <product />
  22. $xml->next('HASLO');
  23. }


no i fajnie wyświetli całą strukturę ALE jak np. wypisać tylko 1 poziom (każdy węzel ma atrybut poziom). np. chce wyświetlić tylko z poziomu 1 wtedy musiałbym zrobić tak

  1. if($node->HASLO->HASLO['poziom'] == 1)


no i jest manufaktura.

p.s. Powtarzanie się "HASLO" jest praiwdłowe. to jedyny znacznik w tym pliku xml. haslo zawiera haslo ktory zawiera kilka haslo


Ten post edytował Fixus 17.08.2010, 12:33:56
Go to the top of the page
+Quote Post
wookieb
post 17.08.2010, 12:56:19
Post #5





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Generalnie XMLReader jest trudno w obsłudze oraz wolniejszy w działaniu w porównaniu do simpleXML. Jeżeli xml-e będą małe bez problemu lepiej będzie użyć simpleXML albo też DOMDocument.


--------------------
Go to the top of the page
+Quote Post
erix
post 17.08.2010, 13:02:02
Post #6





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
no i fajnie wyświetli całą strukturę ALE jak np. wypisać tylko 1 poziom (każdy węzel ma atrybut poziom). np. chce wyświetlić tylko z poziomu 1 wtedy musiałbym zrobić tak

:
Cytat
depth

Depth of the node in the tree, starting at 0



edit:
Cytat
Generalnie XMLReader jest trudno w obsłudze oraz wolniejszy w działaniu w porównaniu do simpleXML

Masz jakieś benchmarki? Z tego, co wiem, to XMLReader jest szybszy niż DOMDocument/SimpleXML.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
Fixus
post 17.08.2010, 13:08:07
Post #7





Grupa: Zarejestrowani
Postów: 295
Pomógł: 9
Dołączył: 8.02.2006

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


też słyszałem, że xmlreader jest szybszy. Mój xml waży 1mb i jest sparsowany i wyświetlony w formie powiedzmy tablicy błyskawicznie więc na osiągi nie narzekam.

Jednak to nie o to w tym temacie chodzi.
Struktura wygląda tak (mniej więcej)

<HASLO>
<HASLO POZIOM="0" NAZWA="JAKAS_NAZWA_1">
<HASLO POZIOM="1" NAZWA="JAKAS_NAZWA_2">
<HASLO POZIOM="2" NAZWA="JAKAS_NAZWA_4"/>
</HASLO>
<HASLO POZIOM="1" NAZWA="JAKAS_NAZWA_3">
<HASLO POZIOM="2" NAZWA="JAKAS_NAZWA_5"/>
</HASLO>
</HASLO>
</HASLO>

Jakoś mniej więcej tak. No i chce np. wygenerować tylko 1 poziom to musiałbym

$xml->HASLO->HASLO['NAZWA']

a to manufaktura
Go to the top of the page
+Quote Post
wookieb
post 17.08.2010, 13:09:57
Post #8





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Jak otworzę bloga to opiszę.
Zrób sobie testowego xmla z 1000 elementów
Przeleć xmlreaderem po każdym (next w pętli + co tam chcesz) a potem simplexml-em i foreachem.


--------------------
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: 14.07.2025 - 06:28