2012-05-03 8 views
2

私はDelphiでXMLを初めて使用しています。すでに知っておいたことのほとんどを見つけるために既に投稿された質問を使用しました。しかし、私は、私たちのサプライヤの1人が発行したXMLファイルの先頭からデータ値を取得するのに苦労しています。Delphi 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> 

にはどうすればペンIDpenSerialNo値を得ることができますか?参考のため

、私は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; 

私は本当に任意の助けをいただければ幸いですそれは提供される可能性があります...事前に感謝! formがルートノードであるため

+1

単に 'form''と' 'value'' ''へquestion''' に変更します「penId」へ。あなたはそれを試しましたか?最適な解決策ではありませんが、あなたがそれを試したかどうかは疑問です。 – Pateman

+0

こんにちは、私はそれを試みましたが、成功しませんでした。 Node.NodeName = 'form'の場合、showmessage( 'Hello World');というコード行を追加しました。 このメッセージは表示されないので、必要な属性値をどのように取得できるかを理解することはできません>> – Gary

+2

''を使用するのは有効ですか? – TLama

答えて

3

、あなたはこのようなものを使用することができます。

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> 
+3

ルートノードの回答に感謝します。これは必要に応じて正確に機能します。私はXMLを作成していないので、タグについてサプライヤに戻ってきました。 – Gary

+3

不正な形式のXMLを生成する製品を出荷しているベンダーは、まれであることを望みますが、そうではありません。 –

+2

私はvanila文字列でXMLを生成するアプリケーションの恐怖を見ました。はい、そこに。そのXMLサンプルには、私が推測するいくつかの問題があります。 – Runner

関連する問題