![]() |
OmniXML: Wie komme ich an das Attribute?
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:
Jetzt möchte ich nach dem Laden wieder auf die Attribute zugreifen (lesen und schreiben), aber wie?
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');
Delphi-Quellcode:
var
XMLDoc: IXMLDocument; XMLElement: IXMLElement; XMLNode : IXMLNode; begin XMLDoc := CreateXMLDoc; XMLDoc.Load('C:/XMLTest.xml'); XMLNode := XMLDoc.SelectSingleNode('Subnode999'); //z.B. Subnode999 |
Re: OmniXML: Wie komme ich an das Attribute?
Delphi-Quellcode:
geht dieses?
s := XMLElement.Attributes['Attr1'];
|
Re: OmniXML: Wie komme ich an das Attribute?
Wäre das Ergebnis von "SelectSingleNode" vom Typ IXMLElement, dann würde
Delphi-Quellcode:
funktionieren. Leider ist das Ergebnis aber vom Typ IXMLNode und da geht das wieder nicht.
XMLElement.GetAttribute('Attr1');
|
Re: OmniXML: Wie komme ich an das Attribute?
probir mal das von mir vorgeschlagene
in IXMLNode find ich zumindestens 2 Dinge, welche für Attribute geeignet sind.
Delphi-Quellcode:
bzw.
//OmniXML.pas
IXMLNode = interface function GetAttributes: IXMLNamedNodeMap; property Attributes: IXMLNamedNodeMap read GetAttributes; end;
Delphi-Quellcode:
wobei .Attributes auch in IXMLDOMNode vorhanden wäre.
//OmniXML_MSXML.pas
IXMLNode = IXMLDOMNode; PS: einfach mal XMLElement. eingeben und schauen was dir die Codevervollständigung so anbietet :zwinker: |
Re: OmniXML: Wie komme ich an das Attribute?
Danke himitsu, ich habe mittlerweile etwas dazu gefunden.
In OmniXMLUtils gibt es
Delphi-Quellcode:
und dahinter steckt dann:
function GetNodeAttr(parentNode: IXMLNode; attrName: string;
var value: WideString): boolean;
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz