2

私はDelphiでXMLを使用するのは初めてで、すでに投稿されている質問を使用して、知っておくべきことのほとんどを見つけました(ありがとうございます!)。ただし、サプライヤの1つが発行した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>

penIdpenSerialNoの値を取得するにはどうすればよいですか?

参考までに、サイトの別の投稿から取得した以下のコードを使用して、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;

何か助けていただければ幸いです...よろしくお願いします!

4

1 に答える 1

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>
于 2012-05-03T11:59:11.533 に答える