似乎TXMLConfig
仅适用于应用程序的基本和简单的属性/设置保存,不适合全文XML文件解析。您应该只读取XML文件,这些文件也是由您的应用程序创建的。在这种情况下,有意义的是不支持具有相同名称的节点,因为它代表相同的属性/设置。
我们假设以下XML文件:
<Configuration Version="1.0">
<Family Name="Simpson">
<Member Gender="Male">Homer</Member>
<Member Gender="Female">Marge</Member>
<Member Gender="Male">Bart</Member>
<Member Gender="Female">Lisa</Member>
<Member Gender="Female">Maggie</Member>
</Family>
</Configuration>
我看了this official tutorial并在网上搜索过,但无法弄明白。有没有办法用TXMLConfig
来阅读Lisa的性别?
答案 0 :(得分:2)
您无法使用TXMLConfig类,因为只有在同一父节点内没有多个具有相同名称的节点时才能使用它。
您必须使用更低级别的功能。以下是如何查找Lisa性别的示例:
uses
Classes, SysUtils, CustApp, Dom, XmlRead
var
Doc: TXMLDocument;
Members: TDOMNodeList;
Member: TDOMNode;
Gender: TDOMNode;
i: integer;
begin
// Read the XML file into an XML Document
ReadXMLFile(Doc, 'D:\A.xml');
// Get all nodes with name "Member"
Members:= Doc.GetElementsByTagName('Member');
// For all Member nodes
for i:= 0 to Members.Count - 1 do
begin
Member:= Members[i];
// Check if their content is Lisa
if(Member.TextContent = 'Lisa') then
begin
// Get the attribute with name "Gender"
Gender:= Member.Attributes.GetNamedItem('Gender');
// Output the value of the attribute
Writeln(Gender.TextContent);
end;
end;
Readln;
end.
答案 1 :(得分:0)
仅注册更多选项。
procedure TFMain.getTicket;
var xDoc: TXMLDocument;
xNode : TDOMNode;
begin
tickt.Clear; // As TMemo
xDoc := DOMFromStream( rest );
xNode := xDoc.ChildNodes.Item[ 0 ];
tickt.Lines.Text := 'Id.....: ' + xNode.FindNode( 'id' ).TextContent +#13
+ 'Name...: ' + xNode.FindNode( 'name' ).TextContent +#13
+ 'e-mail.: ' + xNode.FindNode( 'email' ).TextContent +#13
+ 'Address: ' + xNode.FindNode( 'address' ).TextContent +#13
+ 'City...: ' + xNode.FindNode( 'city' ).TextContent +#13
+ 'Phone..: ' + xNode.FindNode( 'phone1' ).TextContent +#13
;
end;