AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi Mehrere gleichnamige Elemente
Thema durchsuchen
Ansicht
Themen-Optionen

Mehrere gleichnamige Elemente

Ein Thema von dominikkv · begonnen am 7. Feb 2008 · letzter Beitrag vom 7. Feb 2008
Antwort Antwort
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#1

Mehrere gleichnamige Elemente

  Alt 7. Feb 2008, 21:43
Hi

ich hab nen XML-File welches ich auslesen möchte.
Ich verwende dazu die XMLLib von Mütze1

Ich hab nun eine XML-Datei die mehrere gleichnamige Elemente hat.
Leider hab ich kein Plan wie ich die (gezielt) auslesen kann.
Hier erstmal ein Ausschnitt der XML: (Striche am Anfang zur orientation)
Delphi-Quellcode:
- <form name="BILLTO">
  - <element name="BILLTO_STREET_1" type="text" caption="Straße/Hausnr.:">
      <![CDATA[ Brunfels-Str. 8 ]]>
    </element>
  - <element name="BILLTO_POSTCODE" type="text" caption="PLZ:">
      <![CDATA[ 79495 ]]>
    </element>
  - <element name="BILLTO_CITY" type="text" caption="Ort:">
      <![CDATA[ Neuburg ]]>
    </element>
Auf das erste Element kann ich so zugreifen:
Lib.root.getNode('formvalues/form/element').Value.AsString Mein Ziel: die Elemente anhand des Attribut name unterscheiden und drauf zugreifen.
Beispiel:
Lib.root.getNode('formvalues/form').NodeByAttribut('name', 'BILLTO_POSTCODE').Value.AsString Geht sowas in der art?
Hoffe ihr versteht was ich meine^^

mfg.Dominik
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

Re: Mehrere gleichnamige Elemente

  Alt 7. Feb 2008, 22:00
Zitat von dominikkv:
Ich verwende dazu die XMLLib von Mütze1
Frag mich doch direkt, ich glaube nicht das sich hier viele mit der Lib auskennen...

Zitat von dominikkv:
Ich hab nun eine XML-Datei die mehrere gleichnamige Elemente hat.
Leider hab ich kein Plan wie ich die (gezielt) auslesen kann.
Hole dir einfach den Knoten, der die Elemente als Kinder hat. Dieser Knoten hat eine Eigenschaft Nodes, welche die Unterknoten enthält. Dazu gibt es dann die Untereigenschaft Nodes[], welche die XMLKnoten enthält und eine Eigenschaft Count, welche die Anzahl der Elemente in der Liste wiedergibt (also die Anzahl der Knoten unter dem Element).

Ein Beispiel einfach durch die gesamte Liste zu iterieren:
Delphi-Quellcode:
var
  lFormNode, lElement: TXMLNode;
  i: Integer;
begin
  lFormNode := Lib.GetNodeFromPath('formvalues/form');

    // Knoten gefunden?
  if assigned(lFormNode) and lFormNode.HasChildren then
  begin
    for i := 0 to pred(lFormNode.Nodes.Count) do
    begin
      lElement := lFormNode.Nodes[i];

      ShowMessage(lElement.Value.AsString);
    end;
  end;
end;
(Ab BDS2006 besteht natürlich auch die Möglichkeit das ganze mit for lElement in lFormNode.Nodes do möglich)

So, da du nun hier gleiche Knotennamen hast und du sie nur anhand der Attributewerte unterscheiden kannst, kann ich mir auch vorstellen, dass du einen bestimmten Knoten ermitteln willst, in dem du sagst, was das Attribut "name" für ein Wert haben sollte. Dann kannst du es auch so machen:

Delphi-Quellcode:
var
  lFormNode, lElement: TXMLNode;
  i: Integer;
begin
  lFormNode := Lib.GetNodeFromPath('formvalues/form');

    // Knoten gefunden?
  if assigned(lFormNode) and lFormNode.HasChildren then
  begin
    lElement := lFormNode.Nodes.GetNodeByAttributeValue('element', 'name', 'BILLTO_STREET_1');

    if assigned(lElement) then
      ShowMessage('Street 1: ' + lElement.Value.AsString)
    else
      ShowMessage('Street 1: <none>');
  end;
end;
Die Dokumentation für die Library ist unter anderem hier zu finden.

Wenn weitere Fragen sind, poste sie hier...

/PS: Ja ich weiß, dass die Benennung Nodes.Nodes[] doof bis dumm ist, aber es ist leider so historisch gewachsen. Durch die Default Eigenschaft fällt es in Delphi nicht so auf, aber z.B. im C++Builder fällt es massiv auf, da dort die Default Eigeschaften nicht verfügbar/nutzbar sind. Ich durfte mir von manchen Nutzern schon entsprechende Kommentare anhören, aber leider ist es nun nicht mehr groß änderbar.
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Mehrere gleichnamige Elemente

  Alt 7. Feb 2008, 22:13
genial... du hast mir den Abend gerettet
und das nächste mal wenn ich ne Frage zu deiner Lib habe wende ich mich gleich an dich

Big THX und mfg.Dominik

Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:44 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