2012-05-03 72 views
2

我是在Delphi中使用XML的新手,並且使用已發佈的問題來了解我需要知道的大部分內容(謝謝!)。然而......我正在努力從我們的一個供應商發佈的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> 

我怎樣才能得到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; 

我真的很感激任何幫助可以提供......預先感謝!

+1

'question''到'' 只要改變'form''和''value''到'penId'。你嘗試過嗎?不是最理想的解決方案,但我想知道你是否嘗試過。 – Pateman

+0

嗨,是的,我嘗試過,沒有成功。我添加了一行代碼:if Node.NodeName ='form'然後showmessage('Hello World'); 但是這個消息從不顯示,所以我不知道如何獲得我需要的屬性值。>> – Gary

+2

使用''是否有效? – TLama

回答

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

感謝你的答案根節點,非常感謝,並且這完全按照需要工作。我沒有創建XML,因此我已經回到供應商瞭解這些標籤。 – Gary

+3

供應商提供產生格式錯誤的XML的產品,我希望它很少見,但事實並非如此。 –

+2

我見過用vanila字符串生成XML的應用程序的恐怖。是的,它在那裏。這個XML示例有一些問題,我猜。 – Runner