我需要有关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>
我知道如何阅读<ean>
和<ident>
,但我在阅读<property>
时遇到问题,我希望得到像&#34; pomnilnik:7GB&#34;或者&#34; Trdi磁盘:700GB&#34;。
如果我使用此代码:
procedure TForm1.BitBtn4Click(Sender: TObject);
var
DOC:IXMLDocument;
i: Integer;
OrderChilds, properties_Node: IXMLNode;
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
Memo1.Lines.Add(properties_Node.ChildNodes.Nodes['property'].NodeValue)
end;
end;
end;
我只获得每个表中的第一个属性。我想读取第一个表中的所有属性,然后转到下一个表并读取属性等等。
答案 0 :(得分:2)
您必须遍历properties_Node中的所有子节点。与使用xmlData时的操作相同。
propChildList := properties_Node.ChildNodes;
for j := 0 to propChildList.Count - 1 do begin
Memo1.Lines.Add(propChildList.Nodes[j].NodeValue);
end;
这是完整的工作示例:
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;