2011-05-31 68 views
-1

怎樣才能知道是否有一個XML格式的空白點......OmniXML空白節點

的XML文件中有這樣的結構:

<rollercoaster build="0.1 (Dec 30 2010)" debug="no"> 
    <settings name="roller coaster" sourcefile="rolcost.pas"> 
     <description>Roller Coaster admin function</description> 
     <year>2010</year> 
     <manufacturer>ArtTeck</manufacturer> 
      <sears name="sears.uk" size="1024" mda="87117ba5082cd7a615b4ec7c02dd819" region="england" set1="25d"/> 
    <sears name="sears.dk" size="1056" mda="326dbbf94c6fa2e96613dedb53702f8" region="denmark" set1="25d"/> 
    <sears name="sears.gr" size="6802" mda="01b4c38108d9dc4e48da4f8d5821377" region="greece" set1="65d"/> 
    </settings> 
    <settings name="roller coaster2" sourcefile="rolcost2.pas"> 
     <description>Roller Coaster user function</description> 
     <year></year> 
     <manufacturer>ArtTeck</manufacturer> 
    </settings>...... and goes on 
</rollercoaster> 

我想知道的事情是:

第二年的例子是空的,當我嘗試獲取文本節點我得到一個錯誤,並停止生產者我怎麼能通過這個錯誤或更好的如何控制空白節點... 謝謝....

這裏是代碼

for iNode := 0 to rollerList.Length - 1 do 
begin 
    Conf.nxtgrd.BeginUpdate; 
    noderoller := rollerList.Item[iNode]; 
    Conf.nxtgrd.Cell[0,RowNum].AsBoolean := StrToBool(GetNodeTextStr(noderoller,'description')); 
    if GetNodeTextStr(noderoller,'year') <> '' then // here get the exception... 
       Conf.nxtgrd.Cell[1,RowNum].AsString := GetNodeTextStr(noderoller,'year'); 
    Conf.nxtgrd.EndUpdate; 
end; 

簡單的存儲是不是爲德爾福7? p.s.我糾正上面的XML例子在第二年...

+2

如果我理解正確,您希望獲取某個XML節點的文本,並且會得到一個異常。首先發布您嘗試獲取文本的代碼。並指出你的例子中的確切節點是空的。 我會建議使用SimpleStorage,但我看到你仍然在Delphi 7上。至少確保你使用OmniXMLUtils。 – Runner 2011-05-31 07:25:05

+2

除此之外,在你的例子中第二年的節點不是空的。 – gabr 2011-05-31 07:38:26

回答

2

而不是

if GetNodeTextStr(nodegame,'year') <> '' then 

只需使用重載的版本

if GetNodeTextStr(nodegame,'year', '') <> '' then 

這一個取默認值,並返回,如果文本節點未找到。我也在這裏看到一個問題。你遍歷一個節點列表,但是你從哪裏得到「nodegame」。你確定這個節點不是零嗎?我認爲它應該是這樣的:

if GetNodeTextStr(noderoller,'year', '') <> '' then 

不幸的SimpleStorage是BDS 2006和向上兼容。

+0

謝謝亞軍你幫了很多......我只是沒有看到覆蓋功能愚蠢的人... – azrael11 2011-05-31 11:09:55

+1

GetNodeTextStr是「智能」,並返回空字符串,如果第一個參數是零或如果子節點不存在。 – gabr 2011-05-31 12:02:49

+0

有一個TryGetNoteTextStr或GetNodeTextStrDef會稍微更習慣一些,但除了我喜歡選擇的這種小尼姆之外,OmniXML只是非常漂亮。我喜歡OmniXML。每個人都應該使用它! – 2011-06-01 17:59:15