2012-10-04 183 views
1

我想從創造一個txt文件,該XML文件創建XML數據...從txt文件

我這樣做 代碼:

FXml := TNativeXml.CreateName('Root'); 
FXml.XmlFormat := xfReadable; 
open the file 
AssignFile(TFile,'user.txt'); 
Reset(TFile); 
while not eof(TFile) do 
begin 
    Readln(TFile,text); 
    r := Pos(' ',text); 
    t2 := Trim(Copy(text,1,Length(text))); 
    t1 := Trim(Copy(t2,0,r)); 
    FXml.Root.NodeNew('row'); 
    FXml.Root.NodeByName('row').WriteAttributeString('user',t2); 
    FXml.Root.NodeByName('row').WriteAttributeString('pin',t1); 
end; 
    FXml.SaveToFile('new.xml'); 
FXml.free; 

我做錯了nodebyname,但是什麼...

謝謝...

+0

您正在從文本文件讀取一行文本到一個名爲'text'的變量,但是您會檢查名爲't2'的非初始化變量中的第一個空白。看起來'r:= pos'和't2:= trim'行的順序是錯誤的。 –

+0

另請參閱:Trim(Copy(t2,0,r));對於delphi字符串,0應該是1。 – Despatcher

+0

對不起,我糾正了這個......行現在是正確的順序.. – azrael11

回答

1

如果您的文本文件包含多行,您正在創建名爲「行」的多個節點。 NodeByName將始終返回具有給定名稱的第一個節點。

您應該將NodeNew的結果存儲在類型爲TXmlNode的局部變量中,並使用該變量來設置屬性。

var 
    node: TXmlNode 
... 
node := FXml.Root.NodeNew('row'); 
node.WriteAttributeString('user',t2); 
node.WriteAttributeString('pin',t1); 
+0

是我的文本文件包含至少3000個用戶和引腳...是的,這工作正常...謝謝你 – azrael11