如何读取childnode的xml子级
我需要有关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
<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;