AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Wie in XML-Datei sortieren?

Ein Thema von toko · begonnen am 30. Mai 2005 · letzter Beitrag vom 2. Jun 2005
Antwort Antwort
Seite 2 von 3     12 3      
toko

Registriert seit: 19. Apr 2005
40 Beiträge
 
#11

Re: Wie in XML-Datei sortieren?

  Alt 1. Jun 2005, 21:23
Hi,

irgendwie haut das bei mir nicht hin. Ich liste mal etwas ausführlicher meine Schritte auf. Ich habe diesen Code
Delphi-Quellcode:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >

  <xsl:template match="/ | @* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()">
        <xsl:sort select="@titel"/>
      </xsl:apply-templates>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>
in die Datei "sortdata.xsl" im Order, wo sich auch die Anwendung befindet, gespeichert. In meinem Programm löst dies:
xmlStyle.load(FAppPath + 'sortdata.xsl'); eine Exception der Klasse "EAccessViolation" aus. Ich habe mal testweise sortdata.xsl durch data.xml, in der meine XML-Daten liegen, getauscht.
Kein Problem. Es kann dann ja nur daran liegen, dass sortdata eine xsl-Datei ist.

Hab ich was falsch gemacht?

Gruß

[edit=Matze]Beitrag aufgrund eines Caching-Fehlers neu abgesendet. MfG, Matze[/edit]
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#12

Re: Wie in XML-Datei sortieren?

  Alt 1. Jun 2005, 21:31
Wie hast du deine Variablen xmlDoc und xmlStyle deklariert, wie initialisiert?
Bist du mal im single step durch den Code gegangen?
Ist xmlStyle eventuell nil?

marabu
  Mit Zitat antworten Zitat
toko

Registriert seit: 19. Apr 2005
40 Beiträge
 
#13

Re: Wie in XML-Datei sortieren?

  Alt 1. Jun 2005, 21:48
xmlDoc und xmlStyle sind beide vom Typ IXMLDOMDocument2. Initialisiert habe ich die nicht.
Wenn ich durch den Code gehe, dann ist xmlStyle nil. Beim xmlDoc bekomme ich einen Pointer.

Toko
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#14

Re: Wie in XML-Datei sortieren?

  Alt 1. Jun 2005, 22:09
Wenn du keinen guten Grund für die Verwendung von IXMLDOMDocument2 hast, dann nimm IXMLDOMDocument. Ich unterstelle, dass du MSXML 4.0 installiert hast. Das Arbeiten mit dieser Schnittstelle sieht dann ungefähr so aus:

Delphi-Quellcode:
var
  xmlStyle: IXMLDOMDocument;
begin
  // erzeugen
  xmlStyle := CoDomDocument.Create;
  // app erhält Kontrolle erst nach vollständigem load()
  xmlStyle.async := false;
  // Erfolg testen
  if xmlStyle.load(fullFilename)
    then ShowMessage('smile')
    else ShowMessage(xmlStyle.parseError.reason);
  // so wird der vom DOM belegte Speicher wieder freigegeben
  xmlStyle := nil;
end;
marabu
  Mit Zitat antworten Zitat
toko

Registriert seit: 19. Apr 2005
40 Beiträge
 
#15

Re: Wie in XML-Datei sortieren?

  Alt 1. Jun 2005, 22:33
Ich bekomme ein
Ich hatte vorher das Create vergessen . Da hätte ich auch selbst drauf kommen können.

Danke...
toko
  Mit Zitat antworten Zitat
toko

Registriert seit: 19. Apr 2005
40 Beiträge
 
#16

Re: Wie in XML-Datei sortieren?

  Alt 1. Jun 2005, 23:07
Hallo nochmal,

ich hab nun folgende Prozedur:
Delphi-Quellcode:
procedure TfrmMain.sortXMLFile;
var
  xmlStyle: IXMLDOMDocument;
begin
  xmlStyle := CoDomDocument.Create;
  xmlDoc := CoDOMDocument.Create;
  xmlDoc.load(xmlfile);
  xmlStyle.async := false;
  xmlStyle.load(FAppPath + 'data.xsl');
  xmlDoc.load(xmlDoc.transformNode(xmlStyle));
  cds := XMLDoc.documentElement.selectNodes('cd');
  ...
end;
die ich bei einem ButtonClick aufrufe. Meine Daten in der XML-Datei sehen aber immer noch gleich aus.

Hab ich was nicht beachtet?

ToKo
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#17

Re: Wie in XML-Datei sortieren?

  Alt 1. Jun 2005, 23:24
Die XSL-Datei von marabu sorgt normalerweise nur für die interne Umsortierung der Daten. Die XML-Datei selbst bleibt unverändert, aber das DOM-Objekt deines Programms bekommt so die Daten sortiert geliefert.
  Mit Zitat antworten Zitat
toko

Registriert seit: 19. Apr 2005
40 Beiträge
 
#18

Re: Wie in XML-Datei sortieren?

  Alt 2. Jun 2005, 00:10
OK, versteh ich. Dann müßte ich doch auch mit dem DomObjekt arbeiten können. D.h. die Zeile:
  cds := XMLDoc.documentElement.selectNodes('cd'); dürfte dann keine EAccessViolationException auslösen.

Beim öffnen einer XML-Datei gehe nämlich genauso vor, um die Daten aus dem DomObjekt ins StringGrid zu übertragen. Und das klappt ohne Probleme.

Gruß
ToKo
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#19

Re: Wie in XML-Datei sortieren?

  Alt 2. Jun 2005, 07:26
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
  Mit Zitat antworten Zitat
toko

Registriert seit: 19. Apr 2005
40 Beiträge
 
#20

Re: Wie in XML-Datei sortieren?

  Alt 2. Jun 2005, 15:14
OK, jetzt klappts. Danke, marabu, für deine Geduld. Ich probiere gleich noch mal die Sortierung nach verschiedenen Knoten.

Grüße
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz