AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi OmniXML: Wie komme ich an das Attribute?
Thema durchsuchen
Ansicht
Themen-Optionen

OmniXML: Wie komme ich an das Attribute?

Ein Thema von guidok · begonnen am 2. Mär 2009 · letzter Beitrag vom 3. Mär 2009
Antwort Antwort
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#1

OmniXML: Wie komme ich an das Attribute?

  Alt 2. Mär 2009, 09:51
Ich stehe gerade auf dem Schlauch und trotz intensiver Suche bin ich noch nicht auf die Lösung gekommen.

Ich erzeuge eine XML Datei:

Delphi-Quellcode:
  var
    XMLDoc: IXMLDocument;
    XMLElement : IXMLElement;
    idx: Integer;
begin
  XMLDoc := CreateXMLDoc;

  XMLDoc.DocumentElement := XMLDoc.CreateElement('Root_Testfile');

  for idx := 0 to 1000 do begin
    XMLElement := XMLDoc.CreateElement('Subnode' + IntToStr(idx));
    XMLElement.SetAttribute('Attr1', 'Irgendein Text' + DateTimeToStr(Now));
    XMLDoc.DocumentElement.AppendChild(XMLElement);
  end;
  XMLDoc.Save('C:/XMLTest.xml');
Jetzt möchte ich nach dem Laden wieder auf die Attribute zugreifen (lesen und schreiben), aber wie?

Delphi-Quellcode:
  var
    XMLDoc: IXMLDocument;
    XMLElement: IXMLElement;
    XMLNode : IXMLNode;
begin
  XMLDoc := CreateXMLDoc;

  XMLDoc.Load('C:/XMLTest.xml');

  XMLNode := XMLDoc.SelectSingleNode('Subnode999'); //z.B. Subnode999
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: OmniXML: Wie komme ich an das Attribute?

  Alt 2. Mär 2009, 10:07
s := XMLElement.Attributes['Attr1']; geht dieses?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#3

Re: OmniXML: Wie komme ich an das Attribute?

  Alt 2. Mär 2009, 10:10
Wäre das Ergebnis von "SelectSingleNode" vom Typ IXMLElement, dann würde

XMLElement.GetAttribute('Attr1'); funktionieren. Leider ist das Ergebnis aber vom Typ IXMLNode und da geht das wieder nicht.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: OmniXML: Wie komme ich an das Attribute?

  Alt 2. Mär 2009, 10:38
probir mal das von mir vorgeschlagene

in IXMLNode find ich zumindestens 2 Dinge, welche für Attribute geeignet sind.
Delphi-Quellcode:
//OmniXML.pas
IXMLNode = interface
  function GetAttributes: IXMLNamedNodeMap;
  property Attributes: IXMLNamedNodeMap read GetAttributes;
end;
bzw.
Delphi-Quellcode:
//OmniXML_MSXML.pas
IXMLNode = IXMLDOMNode;
wobei .Attributes auch in IXMLDOMNode vorhanden wäre.


PS: einfach mal XMLElement. eingeben und schauen was dir die Codevervollständigung so anbietet
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#5

Re: OmniXML: Wie komme ich an das Attribute?

  Alt 3. Mär 2009, 14:56
Danke himitsu, ich habe mittlerweile etwas dazu gefunden.

In OmniXMLUtils gibt es

Delphi-Quellcode:
function GetNodeAttr(parentNode: IXMLNode; attrName: string;
    var value: WideString): boolean;
und dahinter steckt dann:

Delphi-Quellcode:
function GetNodeAttr(parentNode: IXMLNode; attrName: string;
  var value: WideString): boolean;
var
  attrNode: IXMLNode;
begin
  if IsDocument(parentNode) and assigned(DocumentElement(parentNode)) then
    parentNode := DocumentElement(parentNode);
  attrNode := parentNode.Attributes.GetNamedItem(attrName);
  if not assigned(attrNode) then
    Result := false
  else begin
    value := attrNode.NodeValue;
    Result := true;
  end;
end;
  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 18:51 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