2011-05-11 2 views
4

나는 Delphi을 처음 사용합니다.Delphi XML traversing

각 주제 아래 모든 저자를 찾고 싶었습니다. 여기

당신은 당신이 XML 파일을 관리 할 수있는 선택의 여지가 델파이에서이 //catalog/subject/book/author 같은 표현을 사용하여, 모든 저자을 선택 XPath를 사용하여 내 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

하지만,이 경우 가장 쉽게이 샘플 응용 프로그램

{$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. 
,536에게 Microsoft XML DOM implementation

검사를 사용하는 것입니다

마지막으로 응용 프로그램에서이를 반환합니다.

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