如何读取childnode的xml子级

如何读取childnode的xml子级,xml,delphi,Xml,Delphi,我需要有关xml文件的帮助: <xmlData date="11.04.2014 18:59:15"> <Table> <ean>888182228609</ean> <ident>YH5G16EA</ident> <properties> <property title="Pomnilnik">4GB</property> <property

我需要有关xml文件的帮助:

<xmlData date="11.04.2014 18:59:15">
 <Table>
   <ean>888182228609</ean>
   <ident>YH5G16EA</ident>
   <properties>
     <property title="Pomnilnik">4GB</property>
     <property title="Trdi disk">500GB</property>
     <property title="Optična enota">BREZ</property>
   </properties>
 </Table>
 <Table>
   <ean>888182228609</ean>
   <ident>YH5G16EA</ident>
   <properties>
     <property title="Pomnilnik">5GB</property>
     <property title="Trdi disk">600GB</property>
     <property title="Optična enota">BREZ</property>
   </properties>
 </Table>
 <Table>
   <ean>888182228609</ean>
   <ident>YH5G16EA</ident>
   <properties>
     <property title="Pomnilnik">7GB</property>
     <property title="Trdi disk">700GB</property>
     <property title="Optična enota">BREZ</property>
   </properties>
 </Table>
</xmlData>

我只得到每个表中的第一个属性。我想读取第一个表中的所有属性,然后转到下一个表并读取属性,依此类推。

您必须在属性节点中的所有子节点上循环。与您对xmlData所做的相同。

下面是完整的工作示例:

procedure TForm1.Button1Click(Sender: TObject);
var
  DOC:IXMLDocument;
  i, j: Integer;
  OrderChilds, properties_Node: IXMLNode;
  propChildList: IXMLNodeList;
begin
  DOC := LoadXMLDocument('c:\temp\diss.xml');
  for i := 0 to DOC.ChildNodes.Nodes['xmlData'].ChildNodes.Count - 1 do
  begin
    OrderChilds := DOC.ChildNodes.Nodes['xmlData'].ChildNodes[i];
    if OrderChilds.NodeName = 'Table' then
    begin
      properties_Node := OrderChilds.ChildNodes.Nodes['properties'];
      if Assigned(properties_Node) then begin
        propChildList := properties_Node.ChildNodes;
        for j := 0 to propChildList.Count - 1 do begin
          Memo1.Lines.Add(propChildList.Nodes[j].NodeValue);
        end;
      end;
    end;
  end;
end;

你很接近。您已经知道如何迭代节点的子节点(您正在对
节点进行迭代),因此也可以对
节点应用相同的方法。BTW.这个任务更适合SAX解析器。@ USER 997。2 2:如果答案对你有用,请把它投票,如果它帮助你解决你的问题,把它标记为被接受的答案。这些是在这里说“谢谢”的正确方式。
procedure TForm1.Button1Click(Sender: TObject);
var
  DOC:IXMLDocument;
  i, j: Integer;
  OrderChilds, properties_Node: IXMLNode;
  propChildList: IXMLNodeList;
begin
  DOC := LoadXMLDocument('c:\temp\diss.xml');
  for i := 0 to DOC.ChildNodes.Nodes['xmlData'].ChildNodes.Count - 1 do
  begin
    OrderChilds := DOC.ChildNodes.Nodes['xmlData'].ChildNodes[i];
    if OrderChilds.NodeName = 'Table' then
    begin
      properties_Node := OrderChilds.ChildNodes.Nodes['properties'];
      if Assigned(properties_Node) then begin
        propChildList := properties_Node.ChildNodes;
        for j := 0 to propChildList.Count - 1 do begin
          Memo1.Lines.Add(propChildList.Nodes[j].NodeValue);
        end;
      end;
    end;
  end;
end;