Delphi XML - 从父节点获取值

时间:2012-05-03 10:24:32

标签: xml delphi

我是Delphi中使用XML的新手,并且已经使用已经发布的问题来找出我需要知道的大部分内容(谢谢!)。但是......我正在努力从我们的供应商发布的XML文件的顶部获取数据值。

XML文件的顶部如下所示:

<?xml version="1.0" encoding="utf-8"?>
<form billId="1004" penId="ABCDE" appName="Report Sheet" penSerialNo="AJX-AAT-AGK-B4" >
<question id="1" reference="site_name" value="Acme Inc" /></question>
<question id="2" reference="site_address" value="London" /></question>
<question id="3" reference="TQM_job_no" value="AB1234567" /></question>
<question id="4" reference="TQM_site_no" value="XX999" /></question>

如何获取 penId penSerialNo 值?

作为参考,我使用从网站上的其他帖子获得的以下代码来遍历XML并从问题节点获取值:

for i:= 0 to XMLDocument1.DocumentElement.ChildNodes.Count - 1 do
   begin
       Node:= XMLDocument1.DocumentElement.ChildNodes[I];
 if Node.NodeName = 'question' then
  begin
   if Node.HasAttribute('value') then
    VALUEvar:= Node.Attributes[value'];
    // do something with VALUEvar which is a string
      end;
end;
end;

我真的很感激可以提供任何帮助......提前感谢!

1 个答案:

答案 0 :(得分:3)

由于form是您的根节点,您可以使用以下内容:

uses
  XMLDoc, XMLIntf;

procedure TForm1.Button1Click(Sender: TObject);
var
  XMLDocument: IXMLDocument;
begin
  XMLDocument := LoadXMLDocument('c:\YourFile.xml');
  if XMLDocument.DocumentElement.HasAttribute('penId') then
    ShowMessage(VarToStr(XMLDocument.DocumentElement.Attributes['penId']));
  if XMLDocument.DocumentElement.HasAttribute('penSerialNo') then
    ShowMessage(VarToStr(XMLDocument.DocumentElement.Attributes['penSerialNo']));
end;

无论如何,您的文件无效。您不能使用如下所示的标签:

<tag attr="value"/></tag>

使用:

<tag attr="value"/>

<tag attr="value"></tag>