![]() |
XML lesen
Huhu.
Statt JSON dieses mal XML. Folgenden XML-Code habe ich und möchte alle Elemente von work auslesen.
Code:
Diesen Code habe ich geschrieben, kann jedoch nicht auf die Unterlemente von works zugreifen.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<classify xmlns="http://classify.oclc.org"> <response code="4"/> <!--Classify is a product of OCLC Online Computer Library Center: http://classify.oclc.org--> <workCount>5</workCount> <start>0</start> <maxRecs>25</maxRecs> <orderBy>thold desc</orderBy> <input type="title">Rabenpresse</input> <works> <work author="Liersch, Hendrik" editions="9" format="Book" holdings="78" hyr="2007" itemtype="itemtype-book" lyr="2007" owi="900052081" schemes="DDC LCC" title="Die fast vollständige Geschichte der Rabenpresse : aus Anlaß der Ausstellung im Foyer der Universitätsbibliothek der Freien Universität Berlin vom 26. September bis zum 30. November 2007" wi="175651286"/> <work author="Fuchs, Günter Bruno [Contributor; Editor]" editions="9" format="Book" holdings="20" hyr="1969" itemtype="itemtype-book" lyr="1968" owi="44577153" schemes="LCC" title="Berlin-Buch der Neuen Rabenpresse : mit einem Calendarium auf das Jahr 1969" wi="43039960"/> <work author="Hantzsch, Friedrich Georg" editions="3" format="Book" holdings="3" hyr="2012" itemtype="itemtype-book" lyr="2012" owi="1203218774" schemes="LCC" title="Die Rabenpresse selig" wi="824666518"/> <work author="(Hrsg.), Hermann Schladt" editions="1" format="eBook" holdings="2" hyr="2014" itemtype="itemtype-book-digital" lyr="2014" owi="2945336410" schemes="DDC" title="Edition Rabenpresse 1: Romanzero" wi="943835587"/> <work editions="1" format="Book" holdings="1" hyr="2007" itemtype="itemtype-book" lyr="2007" owi="5622368915" schemes="DDC" title="Die fast vollständige Geschichte der Rabenpresse : aus Anlass der Ausstellung im Foyer der Universitätsbibliothek der Freien Universität Berlin vom 26. September bis 30. November 2007" wi="888198670"/> </works> </classify>
Delphi-Quellcode:
Wie gelange ich an Author, title und hyr (z.B.)?
type
TJSon_Items = record Title: string; Author: String; Publisher: String; PublishedDate: String; Description: String; ImageLinks_Thumbnail: String; ImageLinks_SmallThumbnail: String; ListPrice: String; ISBN_Type: String; ISBN10: String; ISBN13: String; ISBNOTHER: String; end; type TMyJSON = record TotalItems: Integer; Items: TJSONArray; ItemsArray: Array of TJSon_Items; Result: Boolean; end; function JSON_OCLC(urlResult: String; var JSONObject: TJSONObject; var JSonValue: TJSonValue): TMyJSON; var XML: IXMLDOMDocument; node: IXMLDomNode; nodes_row, nodes_se: IXMLDomNodeList; i, j: Integer; Dummy_String: String; begin XML := CreateOleObject('Microsoft.XMLDOM') as IXMLDOMDocument; XML.async := False; XML.loadXML(urlResult); if XML.parseError.errorCode <> 0 then raise Exception.Create('XML Load error:' + XML.parseError.reason); nodes_row := XML.selectNodes('classify/works/work'); setlength(Result.ItemsArray, nodes_row.Length); // hier konnte die Länge korrekt mit 5 ermittelt werden for i := 0 to Pred(nodes_row.Length) do begin node := nodes_row.item[i]; Result.ItemsArray[i].Author := node.selectSingleNode('author').text; // HIER hakt es, weil nichts gefunden wird, auch die Suche nach 'work author' bringt eine exception. Result.ItemsArray[i].Title := node.selectSingleNode('title').text; Result.ItemsArray[i].PublishedDate := node.selectSingleNode('hyr').text; end; end; // Beispielaufruf: var JSONObject: TJSONObject; JSonValue: TJSonValue; MyJson: TMyJSON; Dummy_String: String; begin Dummy_String := '' + '<?xml version="1.0" encoding="UTF-8" standalone="no"?>' + '<classify xmlns="http://classify.oclc.org">' + ' <response code="4"/>' + ' <!--Classify is a product of OCLC Online Computer Library Center: http://classify.oclc.org-->' + ' <workCount>5</workCount>' + ' <start>0</start>' + ' <maxRecs>25</maxRecs>' + ' <orderBy>thold desc</orderBy>' + ' <input type="title">Rabenpresse</input>' + ' <works>' + ' <work author="Liersch, Hendrik" hyr="2007" lyr="2007" title="Die fast vollständige Geschichte der Rabenpresse : aus Anlaß der Ausstellung im Foyer der Universitätsbibliothek" wi="175651286"/>' + ' <work author="Fuchs, Günter Bruno [Contributor; Editor]" hyr="1969" lyr="1968" title="Berlin-Buch der Neuen Rabenpresse : mit einem Calendarium auf das Jahr 1969" wi="43039960"/>' + ' <work author="Hantzsch, Friedrich Georg" editions="3" format="Book" holdings="3" hyr="2012" itemtype="itemtype-book" lyr="2012" owi="1203218774" schemes="LCC" title="Die Rabenpresse selig" wi="824666518"/>' + ' <work author="(Hrsg.), Hermann Schladt" hyr="2014" lyr="2014" title="Edition Rabenpresse 1: Romanzero" wi="943835587"/>' + ' <work editions="1" hyr="2007" lyr="2007" title="Die fast vollständige Geschichte der Rabenpresse : aus Anlass der Ausstellung "/>' + ' </works>' + '</classify>'; MyJson := JSON_OCLC(Dummy_String, JSONObject, JSonValue); showmessage(MyJson.ItemsArray[0].Author); end; LG Mathias Edit: Typen hinzugefügt, Beispielaufruf hinzugefügt |
AW: XML lesen
Du musst die Attribute der Nodes auslesen. Mit
Delphi-Quellcode:
kannst du prüfen ob das Attribut existiert. Dann mit
HasAttribute()
Delphi-Quellcode:
den Wert auslesen.
Attributes[xxx]
|
AW: XML lesen
Liste der Anhänge anzeigen (Anzahl: 1)
Eine Funktion, die JSON_OCLC heißt und dann XML verarbeitet ist auch so haarscharf an Mind-Explosion!
Warum nutzt du nicht den XML-Binding-Wizard? In Delphi Sydney ein neues VCL-Projekt öffnen und dann nochmal über File | New | Other | Delphi | Web | XML Data Binding auswählen. Dann dem Dialog eine Beispiel-XML vorwerfen.
Delphi-Quellcode:
uses
works, Xml.XMLDoc; const Dummy_String = '' + '<?xml version="1.0" encoding="UTF-8" standalone="no"?>' + '<classify xmlns="http://classify.oclc.org">' + ' <response code="4"/>' + ' <!--Classify is a product of OCLC Online Computer Library Center: http://classify.oclc.org-->' + ' <workCount>5</workCount>' + ' <start>0</start>' + ' <maxRecs>25</maxRecs>' + ' <orderBy>thold desc</orderBy>' + ' <input type="title">Rabenpresse</input>' + ' <works>' + ' <work author="Liersch, Hendrik" hyr="2007" lyr="2007" title="Die fast vollständige Geschichte der Rabenpresse : aus Anlaß der Ausstellung im Foyer der Universitätsbibliothek" wi="175651286"/>' + ' <work author="Fuchs, Günter Bruno [Contributor; Editor]" hyr="1969" lyr="1968" title="Berlin-Buch der Neuen Rabenpresse : mit einem Calendarium auf das Jahr 1969" wi="43039960"/>' + ' <work author="Hantzsch, Friedrich Georg" editions="3" format="Book" holdings="3" hyr="2012" itemtype="itemtype-book" lyr="2012" owi="1203218774" schemes="LCC" title="Die Rabenpresse selig" wi="824666518"/>' + ' <work author="(Hrsg.), Hermann Schladt" hyr="2014" lyr="2014" title="Edition Rabenpresse 1: Romanzero" wi="943835587"/>' + ' <work editions="1" hyr="2007" lyr="2007" title="Die fast vollständige Geschichte der Rabenpresse : aus Anlass der Ausstellung "/>' + ' </works>' + '</classify>'; procedure TForm3.FormCreate(Sender: TObject); var Classify: IXMLClassifyType; Works: IXMLWorksType; Work: IXMLWorkType; I: Integer; begin Classify := Getclassify(Xml.XMLDoc.LoadXMLData(Dummy_String)); Works := Classify.Works; for I := 0 to Works.Count - 1 do begin Work := Works.Work[I]; ShowMessage(Work.Author); end; end; |
AW: XML lesen
auf api/interface ebene war das nach einem select (auf "works") irgendwie so hier (aus dem bauch heraus):
Delphi-Quellcode:
xmlDoc.getElementsByTagName("author")[0].childNodes[0].nodeValue;
|
AW: XML lesen
Hallo und vielen Dank an euch für die Anregungen.
Mir wäre es tatsächlich lieber gewesen, wenn ich das händisch hätte eruieren können, aber die XML-Struktur konnte ich tatsächlich nur mit Hilfe des Beitrags von TiGü korrekt auslesen. Dass es diesen Assistenten gibt, wusste ich nicht. LG MAthias |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:52 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 by Thomas Breitkreuz