Någon som har erfarenhet av att arbeta med SAX för att läsa XML filer? ifall man behöver state så måste man spara den själv, t.ex. genom att använda nån FSM eller bara pusha alla öppna taggar på en stack och poppa dom när taggen sluts. Jag behöver inte DOM funktionalitet (om du menar möjlighet att stega framåt och bakåt) men jag förstår inte hur man använder SAX utan att implementera "pseudo-DOM". alltså med pseudo DOM menade jag alltså att bygga upp hela trädet i minnet och skapa en DOM liknande funktionalitet själv. SAX är klart svårare men grymt mycket snabbare.SAX
Förstår hur det fungerar men tycker att det verkar knepigt att använda. Brukar man använda någon slags FSM (state-machine) eller hur håller man koll på var i dokumentet man befinner sig.
Jag menar att eftersom det inte går att komma åt elementet och innehållet samtidigt måste man använda nån mellanvariabel för att veta vilket element innehållet tillhör.
typ (pseudo kod)
Sub Start_Element(name)
element = name
End Sub
Sub Text(contents)
if element = "xxx" Then struct.xxx = content
else if element = "yyy" Then struct.yyy = content
...
End SubSv: SAX
SAX är effektivt om du inte behöver DOM funktionalitet, men om du behöver DOM funktionalitet, så använd då DOM istället för att skriva en egen pseudo-DOM ovanpå SAX. (Såvida du inte gillar att återuppfinna hjulet dvs.)Sv: SAX
Idealfallet för SAX är väl när man skall läsa in data från en XML fil till en struktur. Hur gör man det utan att skapa ett state för varje ComplexType element och spara på en stack. (vilket ioschförsig inte är särskilt svårt men om alla gör så borde det väl finnas nåt färdigt så man inte behöver återuppfinna hjulet)Sv: SAX
>Idealfallet för SAX är väl när man skall läsa in data från en XML fil till en struktur. Hur gör man det utan >att skapa ett state för varje ComplexType element och spara på en stack.
..i det fallet skulle jag också göra ungefär som du skriver..
Antagligen finns det N+1 implementationer för det du beskriver, men dels så har du inte nämnt i vilket språk du jobbar och dels känner jag inte till allt som finns, men åtminstone till php och python (dom vet jag om åtminstone) finns såna bibliotek som gör nativa datastrukturer av XML:en (dvs, nästan DOM men vettigare syntax och mindre minnesanvändning)Sv: SAX
Tanken är just att optimera för prestanda så att man gör så lite som möjligt i grunden och sedan bygger på vad man behöver för att få en optimal lösning.
SAX implementationen i NET's XmlTextReader är mkt bra och hyffsat lätt att använda.
Ola