gpt4 book ai didi

xml - 如何从 XML 文本中提取子节点值?

转载 作者:行者123 更新时间:2023-12-02 05:59:18 25 4
gpt4 key购买 nike

我正在尝试提取名为 left 的子节点的值,该子节点位于名为 design 的节点内,但出现 EInvalidPointer .

我使用的是 Delphi 2007,这是 XML 文本:

<design>
<top>
0
</top>
<left>
5
</left>
<height>
177
</height>
<width>
130
</width>
</design>

这是代码:

uses
XMLDoc, XMLIntf...

var
Stream : TStream;
Doc : TXMLDocument;
Node : IXMLNode;
begin
Stream := TStringStream.Create(Memo1.Lines.Text);
try
Doc := TXMLDocument.Create(nil);
try
Doc.LoadFromStream(Stream);
Node := Doc.ChildNodes.FindNode('design');
if(Node <> nil) then
begin
Node := Node.ChildNodes.FindNode('left'); //EInvalidPointer here
if(Node <> nil) then
begin
//...
end;
end;
finally
Doc.Free;
end;
finally
Stream.Free;
end;
end;

有人可以帮助我理解我做错了什么吗?

最佳答案

Doc := TXMLDocument.Create(nil);

当您将 nil 传递给 TXMLDocument 的构造函数时,这意味着您要求通过引用计数来管理生命周期。这意味着您需要将 Doc 声明为接口(interface)引用:

var
Doc: IXMLDocument;

当然,当您执行此操作时,您不会在 Doc 上调用 Free,并且可以删除 try/finally block 。接口(interface)的引用计数由编译器代表您发出的代码自动管理。

如果您想使用类引用,由于您的代码当前已配置,您需要将所有者传递给构造函数。

关于xml - 如何从 XML 文本中提取子节点值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41824079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com