【发布时间】:2022-01-15 22:29:39
【问题描述】:
我创建了一个递归函数,它将所有 XML 节点名称和值添加到 TMemo。但我需要拥有每个节点的完整 XPath。现在我可以添加父节点的名称,但不能添加完整路径。需要这样的东西:
//document/itemlist/item/accessories/price : 158.54
procedure TForm1.Button1Click(Sender: TObject);
var
S, ss: string;
LNode: IDOMNode;
Index: Integer;
XMLPath:string;
XMLDoc: IXMLDocument;
XMLSelect:IDomNodeSelect;
MainNode, Data, Node: IXMLNode;
procedure AddNodeValToMemo(NodeEl: IXMLNode);
var
j: Integer;
TempNode: IXMLNode;
S, ss: string;
begin
for j := 0 to NodeEl.ChildNodes.Count - 1 do
begin
TempNode := NodeEl.ChildNodes[j];
if TempNode.IsTextElement then
begin
ss := TempNode.ParentNode.NodeName+'/'+TempNode.NodeName;
S := TempNode.nodeValue;
Memo1.Lines.Add(ss + ': ' + S);
inc(Index);
Label1.Caption:=IntToStr(Index);
end;
if TempNode.HasChildNodes then
AddNodeValToMemo(TempNode);
end;
end;
begin
XMLDoc := TXMLDocument.Create(nil);
XMLDoc.LoadFromFile(DIR + XMLFILE);
XMLDoc.Active := True;
XMLDoc.Options := XMLDoc.Options + [doNodeAutoIndent,doAutoPrefix];
XMLDoc.Version := '1.0';
Index:=0;
MainNode := XMLDoc.documentElement;
AddNodeValToMemo(MainNode);
// Form1.DomToTree(MainNode,nil);
// TreeView1.FullExpand;
XMLDoc.Active := False;
end;
【问题讨论】:
-
因为你是做递归的人,你只需要记住当前节点的路径。