WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Varför är dom xml bättre än simple xml (https://www.wn.se/forum/showthread.php?t=1044555)

mojitoo 2010-10-29 17:29

Varför är dom xml bättre än simple xml
 
Hej,
jag undrar varför dom xml bättre än simple xml?

Vad är det som gör den bättre och finns det något fall där den inte är bättre?

emilv 2010-10-29 17:50

Vilket XML-bibliotek som är bäst beror ju på vad du är ute efter. DOM XML implementerar fler funktioner och är bättre objektorienterat (imo). Det följer också DOM-standarden för hur man arbetar med XML-dokument så om du gjort det tidigare i ett annat språk kommer du att känna igen dig. Å andra sidan är DOM XML mer komplex än SimpleXML och därmed svårare att använda för nybörjare.

Båda använder libxml för att utföra sitt arbete så skillnaden i prestanda är förmodligen minimal. De läser in hela XML-filen i minnet så för riktigt stora filer presterar de precis lika dåligt.

För hög prestanda (men med färre funktioner) är någon form av SAX-tolk ännu bättre, till exempel XMLReader-biblioteket.

mojitoo 2010-10-29 18:25

Citat:

Ursprungligen postat av emilv (Inlägg 20375808)
Vilket XML-bibliotek som är bäst beror ju på vad du är ute efter. DOM XML implementerar fler funktioner och är bättre objektorienterat (imo). Det följer också DOM-standarden för hur man arbetar med XML-dokument så om du gjort det tidigare i ett annat språk kommer du att känna igen dig. Å andra sidan är DOM XML mer komplex än SimpleXML och därmed svårare att använda för nybörjare.

Båda använder libxml för att utföra sitt arbete så skillnaden i prestanda är förmodligen minimal. De läser in hela XML-filen i minnet så för riktigt stora filer presterar de precis lika dåligt.

För hög prestanda (men med färre funktioner) är någon form av SAX-tolk ännu bättre, till exempel XMLReader-biblioteket.

Intressant att höra då jag tidigare fått intrycket av att dom xml skulle prestera mycket bättre.

Men för att gå ifrån frågan något, kan man på något sätt exempelvis bara läsa in början av en xml fil? Säg att jag har sparat att den senaste versionen av xml-filen jag läste in sparades klockan 18:20. Nu är klockan 19:20 och jag ska kolla om den har uppdaterats. Det känns som rätt mycket slöseri med bandbredd om man ska behöva läsa in hela filen för att kontrollera en så simpel sak. I xml-filen finns följande rad som jag jämför med: <lastupdated>2010-10-29 18:40:07</lastupdated>

Det jag vill göra är att läsa in en xml fil i en databas. Jag har tidigare löst detta med en while-sats och simple xml. Kanske inte den mest effektiva lösningen, därför jag undrar. Som det är nu läser jag exempelvis in hela xml-filen vid min jämförelse om den är uppdaterad osv. Jag tänkte att kanske XML DOM kunde ha hjälpt mig.

emilv 2010-10-29 18:31

Kolla in XMLReader-biblioteket. Det borde kunna göra det du vill. Annars kan du göra en vanlig stat på filsystemet om filen ligger lokalt (filemtime).

tartareandesire 2010-10-29 20:11

Hur ofta läser du in filen? Hur stor är den? Görs det inte mer än en gång i timmen så behöver du normalt sett inte bry dig mycket om prestanda annat än i extremfall.

mojitoo 2010-10-29 20:44

emilv: Jag ska ta en närmare titt på det.

Citat:

Ursprungligen postat av tartareandesire (Inlägg 20375838)
Hur ofta läser du in filen? Hur stor är den? Görs det inte mer än en gång i timmen så behöver du normalt sett inte bry dig mycket om prestanda annat än i extremfall.

XML filen som läses in varierar i storlek mellan 2-4mb beroende på veckodag och tid, kontrollen sker även via ett cronjob var 20minut så alltså relativt ofta. Anledningen till att den sker så ofta är att datan i den uppdateras väldigt ofrekvent. Ibland kan det vara flera timmar mellan en uppdatering och ibland ett par minuter. XML filen läses förövrigt även in från en annan server så jag vet inget annat sätt att kontrollera när den senast var uppdaterad än att kolla <lastupdate> i själva XML filen.

studiox 2010-10-30 15:53

Citat:

Ursprungligen postat av emilv (Inlägg 20375817)
Kolla in XMLReader-biblioteket. Det borde kunna göra det du vill. Annars kan du göra en vanlig stat på filsystemet om filen ligger lokalt (filemtime).

Ja, XMLReader och XMLWriter klarar man sig inte utan när man jobbar med Streams. Skrev en 500Mb xml fil (runt 15 miljoner entries) för ett par veckor sedan, skulle aldrig ha klarat det utan XMLWriter.

mojitoo 2010-10-30 16:08

Citat:

Ursprungligen postat av studiox (Inlägg 20375915)
Ja, XMLReader och XMLWriter klarar man sig inte utan när man jobbar med Streams. Skrev en 500Mb xml fil (runt 15 miljoner entries) för ett par veckor sedan, skulle aldrig ha klarat det utan XMLWriter.

Bara för att klargöra, jag antar att det är följande bibliotek som ni diskuterar att är bra?

http://php.net/manual/en/book.xmlreader.php
http://www.php.net/manual/en/book.xmlwriter.php


Är det någon av er som vet vilken funktion man borde studera närmare för att inte behöva läsa in hela dokumenten för att kolla en nod alldeles i början av dokumenten?

emilv 2010-11-01 16:52

Då är det XMLReader-klassen du ska studera. Någon särskild funktion verkar det inte vara, utan förstå hur hela klassen fungerar, både funktioner och egenskaper.


Alla tider är GMT +2. Klockan är nu 05:04.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson