2012-10-06 60 views
0

這是我的xml文件:我怎麼能找到,如果一個子節點存在

<?xml version="1.0" encoding="utf-8"?> 
<UsersF Ver="1.1"> 
    <row User="1" Pin="2y44ic" ExtPag="full"/> 
    <row User="2" pin="tfde88" ExtPag="e45" /> 
    <row User="3" Pin="9gr444466gg" Level="nov" GamePag="3" /> 
</UsersF> 

這是我得到的訪問,並把一個字符串電網代碼... 我用的是nextgrid ...

procedure showXmlToString; 
Count:= 0; 
Conf.nxtgrd.AddRow(71); 
Conf.nxtgrd.BeginUpdate; 
with FXml.Root do 
for i := 0 to NodeCount - 1 do 
    begin 
    if Nodes[i].Name <> 'Ver' then 
     begin 
     Conf.nxtgrd.Cell[0,count].AsString := Nodes[i].Nodes[1].Value; 
     Conf.nxtgrd.Cell[1,count].AsString := Nodes[i].Nodes[2].Value; 
     Conf.nxtgrd.Cell[2,count].AsString := Nodes[i].Nodes[3].Value;    
     Conf.nxtgrd.Cell[3,count].AsString := Nodes[i].Nodes[4].Value; 
     count := count + 1; 
     end; 
    end; 

當發現節點不存在時,我得到錯誤。

回答

0

要訪問屬性,您可以使用TXmlNode.AttributeCount來迭代可用屬性的數量。如果此代碼的主要內容是獲取屬性,則可以使用TXmlNode.Containers訪問它們。

讓說你想獲得的所有屬性名&值,可以使用以下的迭代:

with FXML.Root do 
for i := 0 to ContainerCount - 1 do 
begin 
    Log(Format('ContainersName=%s AtribNumber=%d',[Containers[i].Name,i])); 
    for j:=0 to Containers[i].AttributeCount-1 do begin 
    Log(Format('AttribName=%s AttribVal=%s',[Containers[i].Attributes[j].Name,Containers[i].Attributes[j].Value])); 
    end; 
end; 

在這個例子中Log程序將顯示字符串到屏幕上。結果輸出如下:

ContainersName=row AtribNumber=0 
AttribName=User AttribVal=1 
AttribName=Pin AttribVal=2y44ic 
AttribName=ExtPag AttribVal=full 
ContainersName=row AtribNumber=1 
AttribName=User AttribVal=2 
AttribName=pin AttribVal=tfde88 
AttribName=ExtPag AttribVal=e45 
ContainersName=row AtribNumber=2 
AttribName=User AttribVal=3 
AttribName=Pin AttribVal=9gr444466gg 
AttribName=Level AttribVal=nov 
AttribName=GamePag AttribVal=3 

我希望這對你有所幫助。

+0

不,它不工作... bcs行節點中不存在相同的節點... – azrael11

+0

oooh ..你的意思是檢查屬性(用戶,別針,級別..),你可以使用'TXmlNode.AttributeCount'使用'TXmlNode.AttributeValue'迭代和檢索屬性值。 – sybond

+0

是我的意思是屬性... txmlnode.attributecount是錯誤的bcs有些時候給了我相同的數字,但不告訴我哪個節點丟失... – azrael11

相關問題