AGB  ·  Datenschutz  ·  Impressum  







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

Existiert Knoten in XML Dokument

Ein Thema von Luckie · begonnen am 19. Apr 2007 · letzter Beitrag vom 19. Apr 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

Existiert Knoten in XML Dokument

  Alt 19. Apr 2007, 10:40
Ich will hier meine Frage noch mal explizit von dem ShellListview Problem losgelöst stellen: Wie finde ich heraus, ob ein bestimmter Knoten, in meinem Fall der Root-Knoten, in einem XML Dokument existiert? Hintergrund ist der, ich will mit meinem Programm nur XML Dateien öffnen, die auch von meinem Programm sind, weil mit anderen kann mein Programm nichts anfangen.
Bisher habe ich so was:
Delphi-Quellcode:
var
  XMLDoc : DomDocument;
  Node : IXMLDOMNode;
begin
  Result := False;
  CoInitialize(nil);
  XMLDoc := CoFreeThreadedDOMDocument.Create;
  if Assigned(XMLDoc) then
  begin
    XMLDoc.load(Filename);
    try
      Node := XMLDoc.selectSingleNode('/dwfbtemplate/');
    except
      Result := Assigned(Node);
    end;
  end;
  CoUninitialize;
Und die passende XML-Datei dazu:
XML-Code:
  <?xml version="1.0" encoding="ISO-8859-1" ?>
<dwfbtemplate>
  <info>
    <author>Michael Puff</author>
    <description>Nur zum Testen, sonst nichts.</description>
  </info>
  <layers>
    <layer x="105" y="80" w="532" h="400" />
    <layer x="212" y="560" w="345" h="480" />
  </layers>
  <textobjects>
    <textobject x="268" y="484" w="212" h="80" />
  </textobjects>
</dwfbtemplate>
Leider liefert mir mein Code immer False zurück.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Existiert Knoten in XML Dokument

  Alt 19. Apr 2007, 11:22
Zum einen: Ich bin nicht sicher, ob das Probleme machen könnte, aber probiers besser mal mit '/dwfbtemplate' anstelle von '/dwfbtemplate/'.

Zum anderen: Bist du sicher, dass selectSingleNode eine Exception auslöst, wenn der Pfad nicht gefunden wird und nicht einfach nil zurückgibt? Du weißt ja außerdem Result nur im except-Block einen Wert zu, Result könnte also nur true werden, wenn eine Exception auftritt. Irgendwie passt da etwas nicht ganz zusammen, oder
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Existiert Knoten in XML Dokument

  Alt 19. Apr 2007, 11:29
Also es wird einfach nil zurückgegeben. Aber, ob ich den abschliessenden Schrägstrich schreibe oder nicht, macht keinen Unterschied:
Delphi-Quellcode:
class function TTemplateIO.IsFBITemplate(const Filename: WideString): Boolean;
var
  XMLDoc : DomDocument;
  Node : IXMLDOMNode;
begin
  Result := False;
  CoInitialize(nil);
  XMLDoc := CoFreeThreadedDOMDocument.Create;
  if Assigned(XMLDoc) then
  begin
    XMLDoc.load(Filename);
    Node := XMLDoc.selectSingleNode('/dwfbtemplate');
    Result := Assigned(Node);
  end;
  CoUninitialize;
end;
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Udontknow

Registriert seit: 17. Jun 2002
223 Beiträge
 
#4

Re: Existiert Knoten in XML Dokument

  Alt 19. Apr 2007, 11:29
Hallo!
Also, ich mach es so:

Delphi-Quellcode:
procedure TForm65.Button1Click(Sender: TObject);
var
  XML:IXMLDocument;
  TemplateNode:IXMLNode;
begin
  if not OpenDialog.Execute then
    exit;

  //Dokument erzeugen
  XML:=NewXMLDocument;
  try
    //Text übergeben
    XML.LoadFromFile(OpenDialog.Filename);

    //XML-Parser aktivieren
    XML.Active:=true;
    try
      if XML.Node.ChildNodes.FindNode('dwfbtemplate')<>NIL then
        ShowMessage('Jau, Knoten da!')
      else
        ShowMessage('Ja, wo ist er denn?')

      
    finally
      XML.Active:=False;

    end;
  finally
    XML:=NIL;
  end;

end;
Bei mir hat er den Knoten gefunden. Ist natürlich ein anderes Interface, aber vielleicht kannst du ja darauf umschwenken.

Edit: uses XMLIntf, XMLDoc...

Cu,
Udontknow
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Existiert Knoten in XML Dokument

  Alt 19. Apr 2007, 11:37
Also ich benutze ja DomDocument. Und da kennt er die Eigenschaft Node nicht. Deklariere ich XMLDoc als IXMLDocumentIXMLDocument, kennt er NewXMLDocument nicht.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Udontknow

Registriert seit: 17. Jun 2002
223 Beiträge
 
#6

Re: Existiert Knoten in XML Dokument

  Alt 19. Apr 2007, 11:39
Ja, ist eben die Frage, ob du nicht auf IXMLDocument umsatteln kannst/willst.

Edit: Hast du die Units XMLDoc und XMLIntf eingebunden? Da ist die Funktion NewXMLDocument implementiert.

Cu,
Udontknow
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Existiert Knoten in XML Dokument

  Alt 19. Apr 2007, 11:54
Ich habe es jetzt so:
Delphi-Quellcode:
class function TTemplateIO.IsFBITemplate(const Filename: WideString): Boolean;
var
  XMLDoc : IXMLDocument; //DomDocument;
  Node : IXMLDOMNode;
begin
  Result := False;
  XMLDoc := NewXMLDocument;
  if Assigned(XMLDoc) then
  begin
    try
      XMLDoc.LoadFromFile(Filename);
      Result := XMLDoc.Node.ChildNodes.FindNode('dwfbtemplate') <> nil;
    except
      // empty
    end;
  end;
end;
Aber ich könnte irre werden, Result ist immer false, auch wenn ich die richtige Datei übergebe. Den try-except Block brauche ich, damit mir das nicht um die Ohren fliegt, wenn keine XML-Datei übergeben wird.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Udontknow

Registriert seit: 17. Jun 2002
223 Beiträge
 
#8

Re: Existiert Knoten in XML Dokument

  Alt 19. Apr 2007, 11:56
Hmmm... Pack´mal ein ShowMessage(Filename) rein. Manchmal sind es ja so kleine Dinge.

Edit: Habe deinen Code auch nochmal ausgeschnitten und getestet, es funktioniert.

Cu,
Udontknow
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Existiert Knoten in XML Dokument

  Alt 19. Apr 2007, 12:07
Ja, ich glaube, es liegt am Pfad. Über gebe ich ihn hard gecodet funktioniert es. Jetzt hab eich aber wieder ein Problem mit dem ShellListview.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von cruiser
cruiser

Registriert seit: 23. Dez 2003
Ort: Königsbrück/Sachsen
455 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Existiert Knoten in XML Dokument

  Alt 19. Apr 2007, 15:20
Ist nochmal zum vorherigen Thread, Luckie... nicht AFolder.DisplayName sondern AFolder.PathName benutzen und das sollte eigentlich gehn... glaub ich...

Sonst weisser ja nich, wo genau die Datei liegt
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 19:56 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