Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Probleme beim Attribute finden (https://www.delphipraxis.net/156316-probleme-beim-attribute-finden.html)

t0mmy 27. Nov 2010 23:36

Probleme beim Attribute finden
 
Hallo

Ich hab folgende Ausschnitt aus einer XML-Datei:

Code:
<BuilderList>
  <Set LineNo="1">
    <Pname>KP_R02</Pname>
    <Count>3</Count>
    <Program>KP</Program>
    <PInsertion>100,200,300</PInsertion>
    </Set>

  <Set LineNo="2">
    <Pname>KP_R02</Pname>
    <Count>2</Count>
    <Program>KP</Program>
    <PInsertion>0,0,0</PInsertion>
    </Set>

  <Set LineNo="3">
    <Pname>KP_R01</Pname>
    <Count>1</Count>
    <Program>KP</Program>
    <PInsertion>0,0,0</PInsertion>
    </Set>
Ich bin dabei das Attribute "PInsertion" der jeweiligen <Set LineNo="#"> zu ändern.
Beim ersten habe ich es geschafft das Attribute zu finden und zu ändern:

Delphi-Quellcode:
if aapp <> nil then
    begin
      aapp := aapp.ChildNodes.FindNode('BuilderList');
    end;
    if aapp <> nil then
    begin
      aapp := aapp.ChildNodes.FindNode('Set');
    end;
    if aapp <> nil then
    begin
      aapp := aapp.ChildNodes.FindNode('PInsertion');
    end;
    if aapp <> nil then
    begin
      aapp.text:= IntToStr(varx)+','+IntToStr(vary)+','+IntToStr(varz);
    end;
Nun würd ich gern wissen warum ich es nicht bei den anderen <Set LineNo="2"> und Set LineNo="3">
mit dem folgenden code nicht schaffe. Ich hoffe einer von euch hat die Lösung oder entdeckt meinen fehler

Delphi-Quellcode:
if aapp <> nil then
    begin
      aapp := aapp.ChildNodes.FindNode('BuilderList');
    end;
    if aapp <> nil then
    begin
      aapp := aapp.ChildNodes.FindNode('Set');
    end;
    if aapp <> nil then
    begin
    aapp := aapp.AttributeNodes.FindNode('LineNo="2"');
    end;
    aapp.AttributeNodes.
    if aapp <> nil then
    begin
      aapp := aapp.ChildNodes.FindNode('PInsertion');
    end;
    if aapp <> nil then
    begin
      aapp.text:= IntToStr(varx)+','+IntToStr(vary)+','+IntToStr(varz);
    end;
Danke schon mal im Vorraus

sx2008 28. Nov 2010 00:42

AW: Probleme beim Attribute finden
 
In XML gibt es Elemente
XML-Code:
<element>das ist ein Element</element>

und Attribute
XML-Code:
<nocheinelement attribut1="ich bin ein attribut" attribut2="nr 2" />

Wir reden hier also von Elementen.
Aber du brauchst zunächst einmal die Grundlagen von XPath.
Tutorial
Du brauchst ca. einen Tag, bis du die Grundlagen verstanden hast.
XPath ist quasi das was SQL für Datenbanken ist; eine Syntax oder Sprache zur Abfrage von Daten.
Nimm Dir die Zeit XPath zu lernen und dann komm zurück um nach den Details zu fragen.

t0mmy 10. Dez 2010 23:53

AW: Probleme beim Attribute finden
 
Hallo.. Danke dein Link hat mir bisschen weitergeholfen hat zwar ne zeitlang gedauert bis ich es verstanden habe..(hoff ich zumindest) aber trotzdem check ichs nicht so ganz..

ich hab da mal eine andere Methode ausprobiert:

Delphi-Quellcode:
    aapp := alxml.DocumentElement.ChildNodes['Set'];
    if aapp.HasAttribute('LineNo')
      and aapp.Attributes['LineNo'] = '2' then
    begin
    aapp := aapp.ChildNodes.FindNode('PInsertion');
    if aapp <> nil then
      begin
        aapp.text:= IntToStr(varx)+','+IntToStr(vary)+','+IntToStr(varz);
      end;
    end;
diese Funktioniert auch nicht so richtig..
was mache ich falsch ... verzweifel schon

himitsu 11. Dez 2010 00:16

AW: Probleme beim Attribute finden
 
Zitat:

Zitat von t0mmy (Beitrag 1067842)
diese Funktioniert auch nicht so richtig..

Was heißt "nicht so richtig"?
Wenn das Gezeigte dein genau Code ist, womit du es probiert hast (also nichts Verfälschtes/Vereinfachtes), dann kann ich mir den/einen Fehler zwar denken, aber dennoch ...
Zitat:

Zitat von t0mmy (Beitrag 1067842)
was mache ich falsch

Uns eine ordentliche Fehlermeldung vorzuenthalten?
- was für eine Fehlermaldung wird angezeigt
- und oder was läuft wie falsch (Fehlerbeschreibung)

Zitat:

Zitat von t0mmy (Beitrag 1067842)
verzweifel schon

ich auch

t0mmy 11. Dez 2010 10:55

AW: Probleme beim Attribute finden
 
Das Programm so wie oben gepostet funktioniert fehlerfrei.. also es kommt kein Fehler, doch es ändert mir den Wert beim Element bei Set-->LineNo="2"-->PInsertion nicht... hmm
Ich hab schon ein paar methoden ausprobiert..aber die ist die für mich die logischte, aber da tut sich halt nichts..

t0mmy 11. Dez 2010 12:37

AW: Probleme beim Attribute finden
 
Okay ich formulier mal eine andere Frage.
Wie finde ich das Attribut --> <Set LineNo="2"> dann kann ich dort nach <PInsertion> suchen und es ändern.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:24 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