Ich bin gerade dabei Teile einer XML-Datei auszulesen. Klappt soweit ganz gut, nur komme ich nicht an den Teil ran, an den ich ran möchte

Das ist der Teil der XML:
Code: Alles auswählen
<Machine Name="#KR210R2700 EXTRA C4 FLR" />
Danke im Vorraus!
Code: Alles auswählen
<Machine Name="#KR210R2700 EXTRA C4 FLR" />
Das war Fehler 1. Fehler 2 war, das ich etwas völlig falsches ausgelesen habe. Siehe EDIT des ersten Posts!relocate hat geschrieben:Ist TypNode überhaupt gesetzt, es könnte nur ein Schreibfehler sein, aber Du suchst nach 'Machnine Name' ist das nicht eher 'Machine Name', ob TypNode gesetzt ist kann man mit assigned prüfen: if assigned(TypNode) then ..., so mache ich es zumindest.
Code: Alles auswählen
ReadXMLFile(Doc, SelectDirectoryDialogAusgabe.FileName + '\Temp\' + lbROBOTERLISTE.Items[i] + '\C\KRC\Roboter\Config\System\Common\Mada\NGAxis\A1.xml');
TypNode := Doc.DocumentElement.FindNode('Machine');
if TypNode.HasAttributes and (TypNode.Attributes.Length>0) then
begin
//ShowMessage(TypNode.Attributes[0].NodeValue)
varBookmark := varDokument.Bookmarks.Item('Robotertyp');
varBookmark.Range.Text := TypNode.Attributes[0].NodeValue;
end
else
ShowMessage('Robotertyp nicht gefunden!')
Code: Alles auswählen
<?xml version="1.0" encoding="utf-8"?>
<RdcConfiguration Version="1.0" RobotName="K3A1G1524150R05" NetworkArchivePath="" DomainAndUser="" PassWord="Nug8zGQNi9E0dPKXT+WgSw==" />
Code: Alles auswählen
//Robotername
begin
ReadXMLFile(Doc2, SelectDirectoryDialogAusgabe.FileName + '\Temp\' + lbROBOTERLISTE.Items[i] + '\C\KRC\Roboter\Rdc\RobotData.xml' ); //Pfad stimmt, habe ich überprüft)
NameNode := Doc2.DocumentElement.FindNode('RdcConfiguration'); //RdcConfiguration gibt es auch, siehe oben...
if NameNode.HasAttributes and (NameNode.Attributes.Length>0) then //Hier setzt das Programm aus...
begin
varBookmark := varDokument.Bookmarks.Item('Robotername');
varBookmark.Range.Text := NameNode.Attributes[1].NodeValue;
robotername:=NameNode.Attributes[1].NodeValue;
ShowMessage(robotername);
end
else
ShowMessage('Robotername nicht gefunden!');
end;
Ja, der Aufbau ist, soweit ich mich nicht vertan habe, gleich. Wie prüfe ich das? Sorry von "assigned" hab ich noch nix gehört...relocate hat geschrieben:Wie ich schon geschrieben habe, prüfen ob die Variable Assigned ist.
Ist der Aufbau der zweiten identisch mit der ersten?
Code: Alles auswählen
if assigned(NameNode) then begin
{...}
end else showmessage('Fehler');
Code: Alles auswählen
uses simpleinternet;
showmessage(process(SelectDirectoryDialogAusgabe.FileName + '\Temp' + lbROBOTERLISTE.Items[i] + '\C\KRC\Roboter\Rdc\RobotData.xml' ,
'//RdcConfiguration/@RobotName' ).toString)
Code: Alles auswählen
if FileExists(SelectDirectoryDialogAusgabe.FileName + '\Temp\' + lbROBOTERLISTE.Items[i] + '\C\KRC\Roboter\Rdc\RobotData.xml') then
ShowMessage('jo, is da.');
Code: Alles auswählen
//Robotername
if FileExists(SelectDirectoryDialogAusgabe.FileName + '\Temp\' + lbROBOTERLISTE.Items[i] + '\C\KRC\Roboter\Rdc\RobotData.xml') then
begin
ShowMessage('jo, is da.');
ReadXMLFile(Doc2, SelectDirectoryDialogAusgabe.FileName + '\Temp\' + lbROBOTERLISTE.Items[i] + '\C\KRC\Roboter\Rdc\RobotData.xml');
NameNode := Doc2.DocumentElement.FindNode('RdcConfiguration');
if assigned(NameNode) then
begin
if NameNode.HasAttributes and (NameNode.Attributes.Length>0) then
begin
varBookmark := varDokument.Bookmarks.Item('Robotername');
varBookmark.Range.Text := NameNode.Attributes[1].NodeValue;
robotername:=NameNode.Attributes[1].NodeValue;
ShowMessage(robotername);
end
else
ShowMessage('Robotertyp nicht gefunden!');
end;
end
Geht nicht alles, immer irgendwie auch besser?!BeniBela hat geschrieben:Sowas geht viel kürzer mit meinen Internet Tools
Und für <Machine Name="#KR210R2700 EXTRA C4 FLR" /> geht es mit //Machine/@NameCode: Alles auswählen
uses simpleinternet; showmessage(process(SelectDirectoryDialogAusgabe.FileName + '\Temp' + lbROBOTERLISTE.Items[i] + '\C\KRC\Roboter\Rdc\RobotData.xml' , '//RdcConfiguration/@RobotName' ).toString)
Darum geht es hier, Schritt für Schritt die Fehlerquelle zu ermitteln, wenn der Debugger einem dabei nicht weiter hilft.pascalts hat geschrieben:mit deinem Assigned wird die kritische Stelle natürlich übersprungen... hilft mir aber dahingehend nicht weiter, da es ja da ist und ich die stelle brauche![]()
![]()
Ich habe eine andere Vermutung, du sagst, es ist die zweite Datei, ist die Variable Doc2 nur für die zweite Datei oder wurde die schon für die erste Datei benutzt worden?! Es kann sein, dass readxmlfile mit einer Variable die noch in Benutzung ist nicht zusammen arbeitet. D.h. es ist eventuell immer noch die erste Datei gespeichert. Es würde mich wundern, wenn es an der XML Datei liegt, so simpel wie die aufgebaut ist.pascalts hat geschrieben:Kann es irgendwie an der XML Datei liegen?
Ich bin zwar nicht mit der Variante vertraut da ich meine eigene DOM-Class entwickelt habe, aber ich würde sagen, "RdcConfiguration" ist das Root Element was bei meiner Klasse dem DocumentElement entspricht und wenn du darin suchst wirst Du nichts finden.pascalts hat geschrieben:...Code: Alles auswählen
<?xml version="1.0" encoding="utf-8"?> <RdcConfiguration Version="1.0" RobotName="K3A1G1524150R05" NetworkArchivePath="" DomainAndUser="" PassWord="Nug8zGQNi9E0dPKXT+WgSw==" />
...Code: Alles auswählen
... ReadXMLFile(Doc2, SelectDirectoryDialogAusgabe.FileName + '\Temp\' + lbROBOTERLISTE.Items[i] + '\C\KRC\Roboter\Rdc\RobotData.xml' ); //Pfad stimmt, habe ich überprüft) NameNode := Doc2.DocumentElement.FindNode('RdcConfiguration'); //RdcConfiguration gibt es auch, siehe oben... ...