【问题标题】:Delphi XML traversingDelphi XML 遍历
【发布时间】:2011-08-23 12:46:30
【问题描述】:

我是德尔福的新手。

我想找到每个主题下的所有作者。

这是我的 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>

【问题讨论】:

    标签: xml delphi delphi-2007


    【解决方案1】:

    您可以使用XPath 选择所有作者,使用像//catalog/subject/book/author 这样的表达式,在delphi 中您有很多选项来管理XML 文件,但在这种情况下最简单 em> 是使用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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-06
      • 2020-03-18
      • 1970-01-01
      • 1970-01-01
      • 2010-11-04
      • 2021-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多