有一个xml文件,基本内容为:<?xml version="1.0"?>
<!DOCTYPE doc SYSTEM "http://www.yaofool.com/xml/kcb.dtd">
<bootDocNode>
  <ChileNode1>结点内容</ChileNode1>
</bootDocNode>
我用delphi读取的代码为:xmlDoc: IXMLDOMDocument;
Node1:IXMLDOMNode;
//////////////////////
xmlDoc:=CoDOMDocument.Create;
xmlDoc.Load('C:\test.xml');
node1:=xmldoc.selectSingleNode('/bootDocNode/ChileNode1');
if Assigned(node1) then ShowMessage(node1.Text);
问题是这样的:按上面所示的xml原样读取时,提示"xml不可用",报错;当把xml文件中"<!DOCTYPE doc SYSTEM "http://www.yaofool.com/xml/kcb.dtd">"去掉,则读取正常.因此,报错是由xml中的注释部分引起的.但我在处理这个xml文件时,按开发要求不能去掉这块注释,请和位高手指教,使用我上文的代码如何解决?谢谢谢谢!

解决方案 »

  1.   

    这段不是注释。是给该xml指定的定义文档,必须是可访问的.
      

  2.   

    "<!DOCTYPE doc SYSTEM "http://www.yaofool.com/xml/kcb.dtd">" 是XML文件的格式定义文件,如果文件里面申明了这个文件,又在URL中查找不到了话,用DOM解析XML就会报错
    最好的方法是:
    改 "<!DOCTYPE doc SYSTEM "http://www.yaofool.com/xml/kcb.dtd">"  
    为: "<!DOCTYPE doc SYSTEM "kcb.dtd">"
    然后将这个kcb.dtd下载(从http://www.yaofool.com/xml/kcb.dtd上)到和XML 文件相同路径下面,这样就能解析了或者你也可以直接将"<!DOCTYPE doc SYSTEM "http://www.yaofool.com/xml/kcb.dtd">"删除,这样就没有规定格式文件了,就直接可以解析,但是缺点是无法实现格式话的XML文档
      

  3.   

    感谢楼上二位的指点. 首先说,我要读取的文件中的那段注释不能去掉的,因为要从网上获得,它的格式我没法去定义,因此将其去掉或修改的方法是我的问题不能采用的. 还请各位给看一下,如果能将其解析出来,我用delphi自带的xml组件可以正常解析出来的,所以我感觉如果用我所述代码的方式也应该解析的,请各位高手指点
      

  4.   

    MSXML 不可以,必须要有可用的 DTD ,否则默认就会用 MS 自己的
      

  5.   

    感谢各位的关注! 但有些进入误区,xml文件中描述没有实际意义,在我们实际处理时不用.只是由于这个文件要从网上获得,我无法定义其格式,否则就去掉dtd描述这部分了.请大家基于现有的xml文件(即:不要再建议xml采用什么格式,或者其合不合法,我用delphi自带的xml组件可以正常解析的)给出一个解决方案,谢谢.!!
      

  6.   

    那楼主为什么不就用DELPHI带的TXMLDocument呢?
      

  7.   

    to halfdream(哈欠): 因为在整个程序中,都有用CoDOMDocument在处理xml.
      

  8.   

    其实它们用的是一个东西,都用的是MSXML DOM
    你可以用从TXMLDOCUMENT中取到对应的MSXML DOM对象。
      

  9.   

    kcb.dtd是xml的方言,它定义了xml的格式,是必须要的,否则不能读取XML文件