Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi XML File lesen (https://www.delphipraxis.net/79921-xml-file-lesen.html)

Klaus01 31. Okt 2006 09:26


XML File lesen
 
Guten Morgen,

mit
Delphi-Quellcode:
ANode: IXMLNode;
result : String;
...

ANode:=XMLDocument1.DocumentElement.ChildNodes.FindNode('channel');
result:=ANode.ChildNodes['title'].text;
kann ich ohne Probleme so einen Knoten einlesen.

XML-Code:
- <channel>
  <title>Computerclub Zwei</title>
Der Code hat verständlicherweise Probleme wenn
im XML File so etwas steht.
XML-Code:
- <channel>
- <title>
- <![CDATA[ Movie Time ]]>
  </title>
Da ich mit XML noch so gut wie nichts gemacht habe eine etwas blöde Frage:

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

Klaus01 31. Okt 2006 12:00

Re: XML File lesen
 
Habe das jetzt so gelöst.

Delphi-Quellcode:
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;
Ist nicht sehr elegant, wenn jemand eine bessere Lösung bzw.
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

marabu 31. Okt 2006 12:18

Re: XML File lesen
 
Hallo Klaus,

probiere mal das hier:

Delphi-Quellcode:
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;
Freundliche Grüße

Klaus01 31. Okt 2006 12:40

Re: XML File lesen
 
Wahnsinn!!


Delphi-Quellcode:
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;
Habe es nur eine wenig umgestrickt.

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