OmniXML空白节点

时间:2011-05-31 06:43:56

标签: xml delphi delphi-7

如何知道xml中是否有空白节点...

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;

简单存储不适用于delphi 7? 附:我在第二年纠正了上面的xml示例......

1 个答案:

答案 0 :(得分:2)

而不是

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

只使用重载版本

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

这个采用默认值并返回如果找不到文本节点。我也在这里看到一个问题。您遍历节点列表,但是从哪里获得“nodegame”。你确定这个节点不是零吗?我认为它应该是这样的:

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

不幸的是,SimpleStorage是BDS 2006及以上兼容。