我有一个像这样的xml
<?xml version="1.0" encoding="UTF-8"?>
<receipt>
<item></item>
<vat></vat>
<body>
<details>
<description>a</description>
<price></price>
</details>
<details>
<description>b</description>
<price></price>
</details>
</body>
</receipt>
其中详细描述收据的单行。
我需要阅读所有细节。
我尝试使用此代码:
EntryNode := xmldocument1.DocumentElement.ChildNodes['details'];
for i := 0 to EntryNode.ChildNodes.Count do
begin
text := EntryNode.ChildNodes[i];
Break;
end;
但我只获得了第一个细节标记。
我该如何编辑我的代码?
答案 0 :(得分:4)
阅读/导入
procedure importXml;
var
i: Integer;
TransUnits: IXMLNodeList;
begin
ListBox.Clear;
XMLDocument.LoadFromFile('C:\yourpath\demo.xml');
if Assigned(XMLDocument) then
begin
TransUnits := XMLDocument.DocumentElement.ChildNodes['file'].ChildNodes['body'].ChildNodes;
for i := 0 to TransUnits.Count - 1 do
ListBox.Items.Add(TransUnits[I].Attributes['id'] + ' ' + TransUnits[i].ChildNodes['source'].Text + ' ' + TransUnits[i].ChildNodes['target'].Text );
end;
XMLDocument.Active;
end;
查看我的工作示例代码。
写/导出
procedure WriteExport(Sender: TObject);
var
source, target: String;
TargetNode: IXMLNode;
TransUnits: IXMLNodeList;
begin
//XMLDocument.Encoding := 'UTF8';
target := edTarget.Text;
TransUnits := XMLDocument.DocumentElement.ChildNodes['file'].ChildNodes['body'].ChildNodes;
TargetNode := TransUnits[ListBox.ItemIndex].ChildNodes.FindNode('target');
//if not Assigned(TargetNode) then
// TargetNode := XMLDocument.DocumentElement.ChildNodes['file'].ChildNodes['body'].ChildNodes[ListBox.ItemIndex].AddChild('target'); Create
TargetNode.Text := target;
XMLDocument.SaveToFile('C:\export\demo.xml');
end;
答案 1 :(得分:3)
您必须循环并检查ChildNodes是否
var
OuterRoot,EntryNode:IXmlNode;
i,j:Integer;
begin
OuterRoot := xmldocument1.DocumentElement;
for i := 0 to OuterRoot.ChildNodes.Count -1 do
begin
if OuterRoot.ChildNodes[i].NodeName='details' then
begin
Memo1.Lines.Add(StringOfChar('-',20));
Memo1.Lines.Add(OuterRoot.ChildNodes[i].NodeName +':');
EntryNode := OuterRoot.ChildNodes[i];
for j := 0 to EntryNode.ChildNodes.Count -1 do
begin
Memo1.Lines.Add( EntryNode.ChildNodes[j].NodeName + '-' + EntryNode.ChildNodes[j].Text);
end;
end;
end;
end;