AGB  ·  Datenschutz  ·  Impressum  







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

XML Find Node with Attribute

Ein Thema von aegidos · begonnen am 19. Mär 2010 · letzter Beitrag vom 20. Mär 2010
 
aegidos

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

Re: XML Find Node with Attribute

  Alt 20. Mär 2010, 20:32
Hallo,
Also dass scheint doch mega advanced zu sein zumindest für mich. Nachdem ich mir ein paar Tutorials reingezogen hab (Teilweise sind die recht alt von 2003) bin ich immer noch nicht weitergekommen.
Das SelectSingleNode kann ich nicht ausführen da ich mir kein
xmlDoc: IXMLDOMDocument2; anlegen kann, was wiederum daran liegt, dass meine uses directive die UNITS msxml2 oder MSXML2_TLB nicht akzeptiert.

Von welchem Typ müsste denn rootelement sein?
Um einfach meine schon implementierten IXMLNode zu benutzen habe ich mir hier aus dem Forum eine unit geholt:
ForumXML
von Midiar für OpenXML adomxmldom.pas geschrieben.

Meine jetzt "verbesserte" Funktion stürtzt schon beim Laden des XML Files ab. Das Hatte mit TXML noch ganz gut funktioniert, aber dafür gibt es ja kein SelectSingleNode.

VORHER
Delphi-Quellcode:
  XMLDocumentDataGrid := TXMLDocument.Create(Application);
  XMLDocumentDataGrid.FileName := FileName;
  XMLDocumentDataGrid.Active := true;
NACHHER
Delphi-Quellcode:
procedure TForm1.SaveStringGrid( const FileName: TFileName);
var
  f: TextFile;
  i, k,l: Integer;
  tagFound: Integer;
  xmlTag,destFile : String;
  XMLDocumentDataGrid: IXMLDOMDocument;
  newNode,rootelement: IXMLNode;
  eintraege: IXMLDOMNodeList;
    subNode,node: IXMLDOMNode;
  xmlDoc: IXMLDOMDocument;


  nodelist: IXMLNodeList;
begin
  l := 0;
  tagFound := 0;
  if FileExists(FileName)then
  begin
//hier kommt schon der erste CRASH
  XMLDocumentDataGrid.loadXML(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
         eintraege := XMLDocumentDataGrid.selectNodes('werte/eintrag/grenzwert[@benutzt="ja"]');


          node := XMLDocumentDataGrid.DocumentElement.selectSingleNode('//data[@cname=xmlTag]');
          if(node<>nil)then begin
            (node as IXMLNode).Text:=LogDlg.dataGrid.Cells[k+1, i];

          end else begin
             // XMLDocumentDataGrid.DocumentElement.appendChild(subNode).attributes['cname']:=xmlTag;
          node := XMLDocumentDataGrid.DocumentElement.selectSingleNode('//data[@cname=xmlTag]');
              node.Text:=LogDlg.dataGrid.Cells[k+1, i];
          end;

        end;

      end;
             XMLDocumentDataGrid.save(FileName);
// XMLDocumentDataGrid.Active := False;
  end;
end;
Was mach ich denn nur falsch?
Danke und schöne Grüße
Andi
  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 08:06 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