Zitat von
toko:
ich hab nun folgende Prozedur:
Delphi-Quellcode:
procedure TfrmMain.sortXMLFile;
var
xmlStyle: IXMLDOMDocument;
begin
...
xmlStyle.load(FAppPath + 'data.xsl');
xmlDoc.load(xmlDoc.transformNode(xmlStyle));
cds := XMLDoc.documentElement.selectNodes('cd');
...
end;
Wenn du mit diesem Code eine
Access-Violation bekommst, dann wundert mich das nicht. In der ersten Zeile lädst du den XSLT-Code. Der Aufruf der Methode transformNode() in der zweiten Zeile generiert den sortierten
XML-Code, die load() Methode erwartet aber einen
URL und scheitert. Als Ergebnis ist documentElement nicht instanziiert. Beim Aufruf der Methode selectNodes() knallt es dann.
In meiner ersten Antwort hatte ich dir eine Code-Zeile gegeben, deren Sinn dir vielleicht entgangen ist:
xmlDoc.loadXML(xmlDoc.transformNode(xmlStyle));
Wenn du aus einer Datei lädst, dann verwende load(), wenn du einen
XML-String parsen möchtest, dann verwende loadXML().
Matthias hat dich darauf hingewiesen, dass die Transformation mit XSLT nicht direkt auf den Originaldaten durchgeführt wird. Du erhältst neuen
XML-Code, den du natürlich wieder in der gleichen
DOM Variable verarbeiten kannst. Beim Speichern wird dann immer deine zuletzt erstellte Sortierung gespeichert.
marabu