Delphi XML traversing

匿名 (未验证) 提交于 2019-12-03 08:52:47

问题:

I am new to Delphi.

I wanted to find all the authors under each subject.

Here is my XML

<?xml version="1.0"?> <catalog>    <subject id="computer">        <book id="bk101">                                                                       <author>Gambardella, Matthew</author>                                             <title>XML Developer's Guide</title>                                              <genre>Computer</genre>                                                           <price>44.95</price>                                                              <publish_date>2000-10-01</publish_date>                                           <description>An in-depth look at creating applications                            with XML.</description>                                                        </book>                                                                           <book id="bk112">                                                                    <author>Galos, Mike</author>                                                      <title>Visual Studio 7: A Comprehensive Guide</title>                             <genre>Computer</genre>                                                           <price>49.95</price>                                                              <publish_date>2001-04-16</publish_date>                                           <description>Microsoft Visual Studio 7 is explored in depth,                      looking at how Visual Basic, Visual C++, C#, and ASP+ are                         integrated into a comprehensive development                                       environment.</description>                                                     </book>                                                                       </subject>    <subject id="literature">        <book id="bk102">                                                                    <author>Ralls, Kim</author>                                                       <title>Midnight Rain</title>                                                      <genre>Fantasy</genre>                                                            <price>5.95</price>                                                               <publish_date>2000-12-16</publish_date>                                           <description>A former architect battles corporate zombies,                        an evil sorceress, and her own childhood to become queen                          of the world.</description>                                                    </book>                                                                           <book id="bk103">                                                                    <author>Corets, Eva</author>                                                      <title>Maeve Ascendant</title>                                                    <genre>Fantasy</genre>                                                            <price>5.95</price>                                                               <publish_date>2000-11-17</publish_date>                                           <description>After the collapse of a nanotechnology                               society in England, the young survivors lay the                                   foundation for a new society.</description>                                    </book>                                                                           <book id="bk104">                                                                    <author>Corets, Eva</author>                                                      <title>Oberon's Legacy</title>                                                    <genre>Fantasy</genre>                                                            <price>5.95</price>                                                               <publish_date>2001-03-10</publish_date>                                           <description>In post-apocalypse England, the mysterious                           agent known only as Oberon helps to create a new life                             for the inhabitants of London. Sequel to Maeve                                    Ascendant.</description>                                                       </book>                                                                           <book id="bk105">                                                                    <author>Corets, Eva</author>                                                      <title>The Sundered Grail</title>                                                 <genre>Fantasy</genre>                                                            <price>5.95</price>                                                               <publish_date>2001-09-10</publish_date>                                           <description>The two daughters of Maeve, half-sisters,                            battle one another for control of England. Sequel to                              Oberon's Legacy.</description>                                                 </book>                                                                           <book id="bk106">                                                                    <author>Randall, Cynthia</author>                                                 <title>Lover Birds</title>                                                        <genre>Romance</genre>                                                            <price>4.95</price>                                                               <publish_date>2000-09-02</publish_date>                                           <description>When Carla meets Paul at an ornithology                              conference, tempers fly as feathers get ruffled.</description>                 </book>                                                                           <book id="bk107">                                                                    <author>Thurman, Paula</author>                                                   <title>Splish Splash</title>                                                      <genre>Romance</genre>                                                            <price>4.95</price>                                                               <publish_date>2000-11-02</publish_date>                                           <description>A deep sea diver finds true love twenty                              thousand leagues beneath the sea.</description>                                </book>                                                                           <book id="bk108">                                                                    <author>Knorr, Stefan</author>                                                    <title>Creepy Crawlies</title>                                                    <genre>Horror</genre>                                                             <price>4.95</price>                                                               <publish_date>2000-12-06</publish_date>                                           <description>An anthology of horror stories about roaches,                        centipedes, scorpions  and other insects.</description>                        </book>                                                                           <book id="bk109">                                                                    <author>Kress, Peter</author>                                                     <title>Paradox Lost</title>                                                       <genre>Science Fiction</genre>                                                    <price>6.95</price>                                                               <publish_date>2000-11-02</publish_date>                                           <description>After an inadvertant trip through a Heisenberg                       Uncertainty Device, James Salway discovers the problems                           of being quantum.</description>                                                </book>                                                                           <book id="bk110">                                                                    <author>O'Brien, Tim</author>                                                     <title>Microsoft .NET: The Programming Bible</title>                              <genre>Computer</genre>                                                           <price>36.95</price>                                                              <publish_date>2000-12-09</publish_date>                                           <description>Microsoft's .NET initiative is explored in                           detail in this deep programmer's reference.</description>                      </book>                                                                           <book id="bk111">                                                                    <author>O'Brien, Tim</author>                                                     <title>MSXML3: A Comprehensive Guide</title>                                      <genre>Computer</genre>                                                           <price>36.95</price>                                                              <publish_date>2000-12-01</publish_date>                                           <description>The Microsoft MSXML3 parser is covered in                            detail, with attention to XML DOM interfaces, XSLT processing,                    SAX and more.</description>                                                    </book>                                                                       </subject> </catalog> 

回答1:

You can use XPath to select all the authors, using a expression like this //catalog/subject/book/author, from delphi you have a lot of options to manage a XML file, but in this case the most easy is use the Microsoft XML DOM implementation

check this sample application

{$APPTYPE CONSOLE}  uses   ActiveX,   Variants,   ComObj,   SysUtils;  procedure ReadXMLFile(const FileName:TFileName); const   Msxml2_DOMDocument='Msxml2.DOMDocument.6.0'; var   XmlDoc         : OleVariant;   Nodes          : OleVariant;   lNodes         : Integer;   i              : Integer; begin   //create an instance to the XML DOM    XmlDoc       := CreateOleObject(Msxml2_DOMDocument);   try     XmlDoc.Async := False;     //load the file     XmlDoc.Load(FileName);     //set the xpath mode     XmlDoc.SetProperty('SelectionLanguage','XPath');     //check for errors in the xml file       if (XmlDoc.parseError.errorCode <> 0) then        raise Exception.CreateFmt('Error in Xml Data %s',[XmlDoc.parseError]);      //select the nodes with match with the expression     Nodes := XmlDoc.selectNodes('//catalog/subject/book/author');     //get the number of nodes selected     lNodes:= Nodes.Length;     Writeln(Format('%d Authors found',[lNodes]));     //traverse the nodes      for i:=0 to Nodes.Length - 1 do       Writeln(Format('Author Name %s',[Nodes.Item(i).Text]));    finally    XmlDoc :=Unassigned;   end; end;   begin  try     CoInitialize(nil);     try       ReadXMLFile(ExtractFilePath(ParamStr(0))+'test.xml');     finally       CoUninitialize;     end;  except     on E:Exception do         Writeln(E.Classname, ':', E.Message);  end;  Writeln('Press Enter to exit');  Readln;       end. 

finally the application will return this

12 Authors found Author Name Gambardella, Matthew Author Name Galos, Mike Author Name Ralls, Kim Author Name Corets, Eva Author Name Corets, Eva Author Name Corets, Eva Author Name Randall, Cynthia Author Name Thurman, Paula Author Name Knorr, Stefan Author Name Kress, Peter Author Name O'Brien, Tim Author Name O'Brien, Tim 


文章来源: Delphi XML traversing
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!