Die Frage ist, was du auswerten willst. Wenn du z.B.: zählen willst, wieviele Elemente mit Namen <foobar> existieren, geht das mit einer Zeile:
Code: Alles auswählen
process('http://undsoweiter/test.xml', 'count(//foobar)').toString
Code: Alles auswählen
process('http://undsoweiter/test.xml', 'count(//foobar)').toString
Falsch. ADoc ist ein out Parameter in ReadXMLFile und wird in der Prozedur erzeugt.Scotty hat geschrieben:Hast du Documento irgendwo erzeugt? Free sehe ich, aber Create nicht...
Code: Alles auswählen
<Programme>
<Elternelement ID="1">
<Kind1>abc</Kind1>
<Kind2>abc</Kind2>
<Kind3>abc</Kind3>
<Kind4>abc</Kind4>
</Elternelement>
<Elternelement ID=2>
<Kind1>abc</Kind1>
<Kind2>abc</Kind2>
<Kind3>abc</Kind3>
</Elternelement>
<Elternelement ID=3>
<Kind1>abc</Kind1>
<Kind2>abc</Kind2>
<Kind3>abc</Kind3>
<Kind4>abc</Kind4>
<Kind5>abc</Kind5>
<Kind6>abc</Kind6>
</Elternelement>
</Programme>
Ja, hab ich!theo hat geschrieben:Dein "Delphie" Beispiel verstehe ich grad nicht, aber hast du das schon durch?
http://wiki.freepascal.org/XML_Tutorial/de
Aber dieses Beispiel zeigt dir doch, wie du durch den Baum rattern kannst und Namen sowie Attribute auslesen kannst.hbr hat geschrieben:Ja, hab ich!theo hat geschrieben:Dein "Delphie" Beispiel verstehe ich grad nicht, aber hast du das schon durch?
http://wiki.freepascal.org/XML_Tutorial/de
Und dann wenn ein "Kind" 100 mal in einem xml vorkommt, muss man es selbst raus filtern zu welchem Elternteil es gehört.theo hat geschrieben:Aber dieses Beispiel zeigt dir doch, wie du durch den Baum rattern kannst und Namen sowie Attribute auslesen kannst.
Nein, du suchst das interessierende Elternteil unter Programme und nur in diesem Elternteil suchst du das Kind.hbr hat geschrieben: Und dann wenn ein "Kind" 100 mal in einem xml vorkommt, muss man es selbst raus filtern zu welchem Elternteil es gehört.
Kannst du mir die Delphi Unit mal zeigen, die so funktioniert wie du es oben zeigst? Diese Syntax kann ich fast nicht glauben.hbr hat geschrieben: Deswegen mein vorheriges Beispiel mit der Delphi Unit, wo man ein bestimmtes Elternteil angeben kann und dann das dazu gehörige Kind bekommst.
Du brauchst nicht schreien.hbr hat geschrieben: Meine Frage war, welcher Befehl oder Funktion dieses unter Lazarus macht.
Warum nicht? Das wäre sicherlich eine sehr gute Übung.hbr hat geschrieben: Muss ich mir denn dafür doch einen Parser schreiben?
Ich schreie nicht, ich frage nur weil ich nichts finden kann und schon sehr lange suche.Theo hat geschrieben: Du brauchst nicht schreien.
Es gibt eine Unit XPath, vllt. kommst du damit weiter. Ich kann dir dabei aber nicht helfen.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Die andere Frage ist, ob es Sinn macht "sehr lange zu suchen" nur um sich einen 7-Zeiler zu ersparen?hbr hat geschrieben: Ich schreie nicht, ich frage nur weil ich nichts finden kann und schon sehr lange suche.
Warum soll man ein Rad neu erfinden wenn es ewentuell schon vorhanden ist.
Writeln braucht eine Konsole auf Windows. Mach bei Projekteinstellungen -> Linken mal den Haken bei "Win32-GUI-Anwendung" weg.hbr hat geschrieben: Weis den niemand eine Anwort darauf, warum z.B. Writeln auf einem win7 64Bit nicht Funktioniert?
Habe ich im vorherigen Post gefragt.
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Vielen Dank!theo hat geschrieben:Writeln braucht eine Konsole auf Windows. Mach bei Projekteinstellungen -> Linken mal den Haken bei "Win32-GUI-Anwendung" weg.
Code: Alles auswählen
function ExtractAttrName(Doc: TXMLDocument;ID,Name:WideString):WideString;
var
an: TDOMNode;
cn: TDOMNodeList;
i: Integer;
begin
cn:=Doc.DocumentElement.ChildNodes;
for i:=0 to cn.count-1 do
if cn.Item[i].Attributes.GetNamedItem('ID').NodeValue=ID then
begin
an:=cn.Item[i].FindNode(Name);
if assigned(an) then
begin
result:=an.FirstChild.NodeValue;
exit;
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Documento: TXMLDocument;
begin
ReadXMLFile(Documento, 'test.xml');
ShowMessage(UTF8Encode(ExtractAttrName(Documento,'2','Kind3')));
Documento.Free;
end;
Code: Alles auswählen
<Programme>
<Elternelement ID="1">
<Kind1>abc11</Kind1>
<Kind2>abc12</Kind2>
<Kind3>abc13</Kind3>
<Kind4>abc14</Kind4>
</Elternelement>
<Elternelement ID="2">
<Kind1>abc21</Kind1>
<Kind2>abc22</Kind2>
<Kind3>abc23</Kind3>
</Elternelement>
<Elternelement ID="3">
<Kind1>abc21</Kind1>
<Kind2>abc22</Kind2>
<Kind3>abc23</Kind3>
<Kind4>abc24</Kind4>
<Kind5>abc25</Kind5>
<Kind6>abc26</Kind6>
</Elternelement>
</Programme>