2011-05-11 104 views
4

我是Delphi新手。Delphi XML遍歷

我想找到每個主題下的所有作者。

這裏是我的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> 

回答

7

您可以使用XPath選擇所有作者,使用這樣//catalog/subject/book/author一個表情,德爾福你有很多的選項來管理一個XML文件,但在這種情況下,最容易是使用Microsoft XML DOM implementation

檢查此示例應用程序

{$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. 

最終應用程序將返回此

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