![]() |
XML File lesen
Guten Morgen,
mit
Delphi-Quellcode:
kann ich ohne Probleme so einen Knoten einlesen.
ANode: IXMLNode;
result : String; ... ANode:=XMLDocument1.DocumentElement.ChildNodes.FindNode('channel'); result:=ANode.ChildNodes['title'].text;
XML-Code:
Der Code hat verständlicherweise Probleme wenn
- <channel>
<title>Computerclub Zwei</title> im XML File so etwas steht.
XML-Code:
Da ich mit XML noch so gut wie nichts gemacht habe eine etwas blöde Frage:
- <channel>
- <title> - <![CDATA[ Movie Time ]]> </title> Wie lese ich so etwas ein und wie gestalte ich den Code möglichst universell so daß er auf auch andere Formate reagieren und diese einlesen kann? Grüße Klaus |
Re: XML File lesen
Habe das jetzt so gelöst.
Delphi-Quellcode:
Ist nicht sehr elegant, wenn jemand eine bessere Lösung bzw.
ANode:=XMLDocument1.DocumentElement.ChildNodes.FindNode('channel');
BNode:= ANode.ChildNodes.FindNode('title'); if (BNode.NodeType = ntElement) then try result:=BNode.Text; except on e: Exception do begin result:=copy(BNode.XML,pos('CDATA[',BNode.XML)+6,length(BNode.XML)); result:=copy(result,1,pos(']',result)-1); end; end; Lösungsansatz hat bitte melden. Was mir daran nicht so ganz passt ist, daß ich erst eine Exception abwarten muß um zu erfahren daß das Element kein Textelement ist. Grüße Klaus |
Re: XML File lesen
Hallo Klaus,
probiere mal das hier:
Delphi-Quellcode:
Freundliche Grüße
function GetText(e: IXMLDOMElement): String;
var i: Integer; n: IXMLDOMNode; begin Result := ''; for i := 0 to Pred(e.childNodes.length) do begin n := e.childNodes.item[i]; if n.nodeType = NODE_TEXT then Result := Result + n.text else if n.nodeType = NODE_ELEMENT then Result := Result + GetText(n as IXMLDOMElement) else if n.nodeType = NODE_CDATA_SECTION then Result := n.nodeValue else // skip any other nodeType ; end; end; |
Re: XML File lesen
Wahnsinn!!
Delphi-Quellcode:
Habe es nur eine wenig umgestrickt.
function getText(aNode:IXMLNode):String;
var i: Byte; dummyNode: IXMLNode; begin for i:=0 to pred(aNode.ChildNodes.Count) do begin dummyNode:=aNode.ChildNodes.Get(i); if dummyNode.NodeType = ntText then result:=result+ANode.Text else if dummyNode.NodeType = ntElement then result:=result+dummyNode.GetText else if dummyNode.NodeType = ntCData then result := dummyNode.NodeValue else result :=''; end; end; Danke! Grüße Klaus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:07 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