XML的结构如下: 
<class> 
    <TypeID>01002 </TypeID>  
    <Categories type="123" info="Class" degree="1"/>  
    <Categories type="456" info="SubClass" degree="2"/>  
    <Categories type="789" info="DetailClass" degree="3"/>   
    <Description> <![CDATA[aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa]]> </Description>  
    <Serverity>0.0 </BugServerity>  
    <Feedback/>  
    <Advice/> 
  </class>  
开发环境是delphi7,请问如何用一个定义一个TStringlist类型或者其他数组函数获取XML中class下的各元素的值????又如何调用呢?急急急啊!!!

解决方案 »

  1.   

    解析xml,把节点依次读到TStringList或数组中
      

  2.   


    uses XMLIntf,XMLDoc;.............
    procedure TForm1.Button1Click(Sender: TObject);
    var
      XMLFile:IXMLDocument;
      i:integer;
      XML_Node,XML_SubNode:IXMLNode;
      XMLFilePath:string;
    begin
        XMLFilePath:='C:\test.xml'  ;
        try
          XMLFile:=TXMLDocument.Create(XMLFilePath);
          XMLFile.Active:=true;
        except
          on E:Exception do
          begin
            application.MessageBox(pchar(e.Message),pchar('ÐÅÏ¢Ìáʾ')) ;
            abort;
          end;
        end;    XML_Node:=XMLFile.DocumentElement;    for i := 0 to XML_Node.ChildNodes.Count-1 do
        begin
          XML_SubNode:=XML_Node.ChildNodes.Nodes[i];
          memo.Lines.Add('----------------------------');
          memo.Lines.Add(XML_SubNode.NodeName);
          memo.Lines.Add(vartostr(XML_SubNode.Attributes['type']));
          memo.Lines.Add(vartostr(XML_SubNode.Attributes['info']));
          memo.Lines.Add(vartostr(XML_SubNode.Attributes['degree']));
          if XML_SubNode.IsTextElement and XML_SubNode.HasChildNodes then
            memo.Lines.Add(XML_SubNode.Text);
          memo.Lines.Add('----------------------------');
        end;
    end;这个是个测试的 
    xml里面的内容写到一个memo里面了你给的
    <Serverity>0.0 </BugServerity> 
    不匹配
    这样的吧<Serverity>0.0 </Serverity>或<BugServerity>0.0 </BugServerity>
      

  3.   

    uses XMLIntf,XMLDoc;.........procedure TForm5.Button1Click(Sender: TObject);
    var
      XMLFile:IXMLDocument;
      i:integer;
      XML_Node,XML_SubNode:IXMLNode;
      XMLFilePath:string;
    begin
        XMLFilePath:='C:\test.xml'  ;
        try
          XMLFile:=TXMLDocument.Create(XMLFilePath);
          XMLFile.Active:=true;
        except
          on E:Exception do
          begin
            application.MessageBox(pchar(e.Message),pchar('ÐÅÏ¢Ìáʾ')) ;
            abort;
          end;
        end;    XML_Node:=XMLFile.DocumentElement;    for i := 0 to XML_Node.ChildNodes.Count-1 do
        begin
          XML_SubNode:=XML_Node.ChildNodes.Nodes[i];
          memo.Lines.Add('----------------------------');
          memo.Lines.Add(XML_SubNode.NodeName);//节点名称
          memo.Lines.Add(vartostr(XML_SubNode.Attributes['type']));//对应属性值,没有对应属性就为空
          memo.Lines.Add(vartostr(XML_SubNode.Attributes['info']));
          memo.Lines.Add(vartostr(XML_SubNode.Attributes['degree']));
          if XML_SubNode.IsTextElement and XML_SubNode.HasChildNodes then
            memo.Lines.Add(XML_SubNode.Text);//节点内容(为叶节点时且有内容)
          memo.Lines.Add('----------------------------');
        end;end;你给的<Serverity>0.0 </BugServerity> 
    应该是这样的<Serverity>0.0 </Serverity>或这样的<BugServerity>0.0 </BugServerity>  
      

  4.   

    使用Nativexml解析
    xml: TNativexml;
    begin
      xml.loadfromstream(stream);
      for i := 0 to xml.root.count - 1 do
      begin
        xml.root.nodes[i].readattributeXXX等函数来读取各个属性值
      end;
    end;
      

  5.   

    先把xml的数据装进TStringList里,可以保存成文本先,也可以直接转
    然后一行一行的解析,结合copy,pos,delete函数var
      List: TStringList;
      tmpIndex: Integer;
      tmpLoop: Integer;
    begin
      List := TStringList.Create;
      List.LoadFile('路径名');
      for tmpLoop := 0 to tmpIndex do  {tmpIndex你的读取的行数,具体根据你的程序而定}
      begin
        ....
      end;
    end;