我用TXMLDocument组件来读取一个XML文件,我用IXMLDOMNode定义了一个根节点ndRoot,然后:
  XML1.LoadFromFile( 'Setting.xml' );
  XML1.Active := True;
  ndRoot := (XML1.DocumentElement.DOMNode as IXMLDOMNodeRef).GetXMLDOMNode;

  for i:=1 to 8 do
  begin
    g_aryStrTag[i][1] := ndRoot.selectSingleNode( '/TagLog/Tank[' + IntToStr(i) +']/StartStop/@TagName' ).nodeValue;
    g_aryStrTag[i][2] := ndRoot.selectSingleNode( '/TagLog/Tank[' + IntToStr(i) +']/Flow/@TagName' ).nodeValue;
    g_aryStrTag[i][3] := ndRoot.selectSingleNode( '/TagLog/Tank[' + IntToStr(i) +']/Type1/@TagName' ).nodeValue;
    g_aryStrTag[i][4] := ndRoot.selectSingleNode( '/TagLog/Tank[' + IntToStr(i) +']/Type2/@TagName' ).nodeValue;
    g_aryStrTag[i][5] := ndRoot.selectSingleNode( '/TagLog/Tank[' + IntToStr(i) +']/Group/@TagName' ).nodeValue;
    g_aryStrTag[i][6] := ndRoot.selectSingleNode( '/TagLog/Tank[' + IntToStr(i) +']/Total/@TagName' ).nodeValue;
    g_aryStrTag[i][7] := ndRoot.selectSingleNode( '/TagLog/Tank[' + IntToStr(i) +']/Archive/@TagName' ).nodeValue;
    g_aryStrTag[i][8] := ndRoot.selectSingleNode( '/TagLog/Tank[' + IntToStr(i) +']/Spare1/@TagName' ).nodeValue;
  end;

XML文件中有8个Tank节点,上面的程序在一些电脑上可以正常运行,但在有些电脑上报错,我跟踪了一下,发现在出错电脑上的Tank节点的索引是以0开始,而不是1,即Tank[1]不是第一个Tank节点,而是第二个,这样当i循环到8时,节点Tank[8]是不存在的,因此报错。
我想问一下,MSXML对XML文件的读取有不同的方式吗?怎样才能将不同电脑的XML设置成一样的读取方式?