2011-05-31 83 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