AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi Wie vom IDOMNode ein IXMLNode bekommen?
Thema durchsuchen
Ansicht
Themen-Optionen

Wie vom IDOMNode ein IXMLNode bekommen?

Ein Thema von Boro · begonnen am 31. Okt 2009 · letzter Beitrag vom 22. Mär 2010
 
aegidos

Registriert seit: 30. Okt 2007
40 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Wie vom IDOMNode ein IXMLNode bekommen?

  Alt 21. Mär 2010, 07:28
Hallo,
ich habe hier auch ganz speziell eine Frage zur IXMLNode Schnittstelle und IXMLDOMNodeList.

Um an ein XML File Knoten anzuhängen bzw. falls die Knoten schon bestehen sollten nur die Werte (also das Text Attribut) neu zu setzen habe ich unten stehende Procedure geschrieben.

Bei der Verwendung von XPath zeigt sich hier eine seltsame Eigenheit.
Verwende ich ein hart codiertes XPath Statement so wird der Knoten in der Quelldatei gefunden.
Wenn ich das Traversieren abhängig von einer Variablen mache hört der Spass schon auf und der Knoten wird nicht gefunden. Woran kann das denn liegen?

QUELLDATEI
Delphi-Quellcode:
<dates>
   <data>sthlike input1</data>
   <data cname="dummy">sthlike input2</data>
   <data cname="0">sthlike input3</data>
</dates>
Die Procedure
Delphi-Quellcode:
procedure TForm1.ParseMSXML(const FileName: TFileName);
var Document: IXMLDOMDocument;
    NodeList: IXMLDOMNodeList;
    Node: IXMLDOMNode;
    xmlTag: string;
    i,k: Integer;
begin
  if FileExists(FileName)then
  begin
  Document:=CoDOMDocument.Create;
  Document.load(FileName);

      // loop through cells -- Hashtabelle mit korrespondierenden Wertepaaren
    for i := 0 to LogDlg.dataGrid.RowCount - 1 do
      for k := 0 to LogDlg.dataGrid.ColCount - 1 do
      begin
        if (LogDlg.dataGrid.Cells[k, i] <> '')and (LogDlg.dataGrid.Cells[k+1, i] <> '') then
        begin
        //in xmlTag steht der Wert den das Attribut cname dann bekommen soll
           xmlTag := StringReplace(LogDlg.dataGrid.Cells[k, i], ' ', '', [rfReplaceAll, rfIgnoreCase]);
         // Knoten mit XPath selektieren
//Hier wird nach cname="0" gesucht aber kein Knoten gefunden obwohl in xmlTag eindeutig '0' steht
//gibts hier ein Problem bei der Verwendung von Variablen in XPath Statements?
//muss ich meinen String noch irgendwie casten oder machen die ANführungszeichen Ticks Probleme?
          Node := Document.DocumentElement.selectSingleNode('/dates/data[@cname="xmlTag"]');
          if(node<>nil)then begin
                Node.Text:=LogDlg.dataGrid.Cells[k+1, i];

          end else begin
//Hier wird nach cname="0" gesucht und auch ein Knoten gefunden !!
              Node := Document.DocumentElement.selectSingleNode('/dates/data[@cname="0"]');
              Node.Text:=LogDlg.dataGrid.Cells[k+1, i];
          end;

        end;

      end;


  Document.save(FileName);
  end;
end;
Vielen Dank schon vorab !
Grüße
Andreas
  Mit Zitat antworten Zitat
 


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 01:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz