AGB  ·  Datenschutz  ·  Impressum  







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

wie komm ich nur an die Werte ?

Ein Thema von Gege · begonnen am 6. Mär 2018 · letzter Beitrag vom 8. Mär 2018
Antwort Antwort
Seite 1 von 2  1 2      
Gege

Registriert seit: 5. Sep 2011
Ort: Sachsen / Naunhof
77 Beiträge
 
Delphi XE7 Architect
 
#1

wie komm ich nur an die Werte ?

  Alt 6. Mär 2018, 19:29
Hallo Leute,
ich hab mal wieder ein Problem und steh gerade auf den Schlauch ..

ich hab ein XML Dokument

Code:
<?xml version="1.0" encoding="iso-8859-1"?>
<Document>
  <Doctype>PDF</Doctype>
  <Index>
   <Var Name="*FIRMA" Value="F61" />
   <Var Name="*BELEGART" Value="VK" />
   <Var Name="*BELEGKREIS" Value="LF" />
   <Var Name="*BELEGNR" Value="0845578" />
   <Var Name="*BELEGDATUM" Value="2018-02-22" />
   <Var Name="*KONTOTYP" Value="D" />
   <Var Name="*ADRESSNR" Value="71362" />
  </Index>
</Document>
mein Ziel ist es einen Wert bei

<Var Name="*ADRESSNR" Value="71362" />

in zum Beispiel
<Var Name="*ADRESSNR" Value="08157" />

zu ändern und

dann alles wieder abzuspeichern.

Ich habe mit XMLDocument geladen und komme auch z.b auf den Doctype aber auf das Attribut Value von Var habe ich
meine Probleme..

Code:

 ( xmldoc:IXMLNode; )

xmldoc.ChildNodes.Nodes['Index'].ChildNodes['Var'].Attributes['Value'].NodeValue .. ??
funktioniert natürlich nicht .. hmm wie greif ich denn nur darauf zu
kann mir einer helfen ?

speichern ist dann kein problem .. mit xmldoc.SaveToFile

viele Grüße Gege
Gerd
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#2

AW: wie komm ich nur an die Werte ?

  Alt 6. Mär 2018, 19:37
Bei Google suchenXPath / Bei Google suchendelphi xml xpath, denn da kannst du nach dem Node "Var", welcher ein Attribut Name="*ADRESSNR" suchen/fragen

oder mit Index zugreifen, also alles Nodes "Var" auflisten, mit einer Schleife alle durchgehn und deren Attribute prüfen,
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 6. Mär 2018 um 19:39 Uhr)
  Mit Zitat antworten Zitat
Gege

Registriert seit: 5. Sep 2011
Ort: Sachsen / Naunhof
77 Beiträge
 
Delphi XE7 Architect
 
#3

AW: wie komm ich nur an die Werte ?

  Alt 6. Mär 2018, 19:47
xpath .. ist das eine Komponente ?
Gerd
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: wie komm ich nur an die Werte ?

  Alt 7. Mär 2018, 09:20
Nicht getestet:
Delphi-Quellcode:
procedure SetIndexValue(ADoc: IXMLDocument; const AIndex, AValue: string);
var
  IndexNode, Node: IXmlNode;
  i: Integer;
begin
  IndexNode := ADoc.ChildNodes.Nodes['Index'];
  {Suchen und Ändern}
  for i := 0 to IndexNode.ChildNodes.Count - 1 do
  begin
    Node := IndexNode.ChildNodes[i];
    if (Node.NodeName = 'Var') and (Node.Attributes['Name'] = AIndex) then
    begin
      Node.Attributes['Value'] := AValue;
      Exit;
    end;
  end;
  {nicht gefunden, neu anlegen}
  Node := IndexNode.AddChild(AIndex);
  Node.Attributes['Name'] := AIndex;
  Node.Attributes['Value'] := AValue;
end;

SetIndexValue(xmlDox, '*ADRESSNR', '08157');
  Mit Zitat antworten Zitat
Gege

Registriert seit: 5. Sep 2011
Ort: Sachsen / Naunhof
77 Beiträge
 
Delphi XE7 Architect
 
#5

AW: wie komm ich nur an die Werte ?

  Alt 7. Mär 2018, 12:40
ok kann ich mal testen ..

melde mich mit Ergebnis

danke schon mal
Gerd
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#6

AW: wie komm ich nur an die Werte ?

  Alt 7. Mär 2018, 13:10
xpath .. ist das eine Komponente ?
Wie wäre es, wenn du dir die ersten 2-3 Ergebnisse der verlinken Suchen ansiehst?
1.) was es ist
2.) wie man es im Delphi nutzt

in etwa so
XMLDocument.DocumentElement.selectSingleNode('Index/Var[@Name="*ADRESSNR"]/attribute::Value').Value := '123456';
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Gege

Registriert seit: 5. Sep 2011
Ort: Sachsen / Naunhof
77 Beiträge
 
Delphi XE7 Architect
 
#7

AW: wie komm ich nur an die Werte ?

  Alt 7. Mär 2018, 13:40
hab es gerade probiert ..

leider kommt das er den Knoten Index nicht finden konnte ?

kommt auch wenn ich z.B.

showmessage(xmldocument1.ChildNodes['Index'].Nodename);

mache
Gerd
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#8

AW: wie komm ich nur an die Werte ?

  Alt 7. Mär 2018, 14:17
Fällt dir bei meinem Code-Beispiel etwas auf?
> DocumentElement Wenn du direkt vom Dokument aus gehst, dann mußt du den Root-Knoten <Document> mit angeben.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Gege

Registriert seit: 5. Sep 2011
Ort: Sachsen / Naunhof
77 Beiträge
 
Delphi XE7 Architect
 
#9

AW: wie komm ich nur an die Werte ?

  Alt 7. Mär 2018, 15:43
Hallo Himitsu

Deine Version hatte ich erst danach getestet ..
Hatte Deine Antwort in den Moment wo ich
Blup geantwortet habe noch nicht gesehen.

habe Dein's aber auch getestet
da bekomme ich nach

XMLDocument1.DocumentElement.

aber nicht selectSingleNode vorgeschlagen .. also
kommt da schon Fehler ..

vg Gege
Gerd
  Mit Zitat antworten Zitat
Gege

Registriert seit: 5. Sep 2011
Ort: Sachsen / Naunhof
77 Beiträge
 
Delphi XE7 Architect
 
#10

AW: wie komm ich nur an die Werte ?

  Alt 7. Mär 2018, 17:44
So jetzt hab ich es gelöst..

mit Blup seiner Variante .. Danke Blup

Variante himitsu sieht zwar irgendwie einfacher aus ..
aber leider bekommt man bzw. hab ich es nicht gefunden
genauere Infos dazu.

musste nur wie himitsu es erwähnte natürlich den rootknoten "Document" mit angeben

die Procedure sieht jetzt so aus ..
Code:
procedure SetIndexValue(ADoc: IXMLDocument; const AIndex, AValue: string);
var
  IndexNode, Node: IXmlNode;
  i: Integer;
begin
  IndexNode := ADoc.ChildNodes['Document'].ChildNodes.Nodes['Index'];
  {Suchen und Ändern}
  for i := 0 to IndexNode.ChildNodes.Count - 1 do
  begin
    Node := IndexNode.ChildNodes[i];
    if (Node.NodeName = 'Var') and (Node.Attributes['Name'] = AIndex) then
    begin
      Node.Attributes['Value'] := AValue;
      Exit;
    end;
  end;
  {nicht gefunden, neu anlegen}
  Node := IndexNode.AddChild(AIndex);
  Node.Attributes['Name'] := AIndex;
  Node.Attributes['Value'] := AValue;
end;
dann passt das auch

vielen Dank ..
Blup & himitsu

@himitsu googeln tu ich immer vorher .. nur wenn ich nach Stunden keine Lösung finde
frag ich mal in ein Forum nach .. natürlich nicht um nur auf Google hingewiesen zu werden
nur mal Rande mit erwähnt..
Gerd
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 02:45 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