Delphi:尝试访问XML节点时出现EInvalidPointer错误

3

我试图加载一个节点,但在 Delphi 上遇到了 EInvalidPointer 错误。

我的 "xml" 如下:

<RYCFile>
    <GeneralInfo>
        <SystemName/>
        <NSpecies>1</NSpecies>
        <NMaxCriterias>2</NMaxCriterias>
    <MaxRating>1</MaxRating>
        <SystemType>0</SystemType>
        <EvolutivePointCost>1</EvolutivePointCost>
    </GeneralInfo>
    <Race Index="1">
        <RaceName>Race #1</RaceName>
        <NumCriterias>2</NumCriterias>
        <Criteria Index="1">
            <Name>Criteria #1</Name>
                <NSubCriterias>0</NSubCriterias>
                <Limiter>0</Limiter>
            </Criteria>
            <Criteria Index="2">
                <Name>Criteria #2</Name>
                <NSubCriterias>0</NSubCriterias>
                <Limiter>0</Limiter>
            </Criteria>
        </Race>
</RYCFile>

我甚至无法读取DocumentElement。

我已经在各个地方搜索了,但是似乎已经陷入困境。找不到一种解决方案适用于我所遇到的问题。

用于“读取”的代码:

FormSkeletonMaker.XMLDocumentFile.LoadFromFile(FileName);
FormSkeletonMaker.XMLDocumentFile.Active := True;
iNode := FormSkeletonMaker.XMLDocumentFile.ChildNodes.FindNode('GenInfo');

目前的情况是这样的。我只是测试这个文档的加载能力(它是使用同一程序制作的)。


我更新了原始帖子。现在更易读了。 - AdelC
请将以下与编程有关的内容从英语翻译为中文。仅返回翻译文本:请使用四个空格代替“>”来格式化代码 - dldnh
1个回答

4
如果DocumentElement属性失败,则FormSkeletonMakerXMLDocumentFile对象指针无效。

表单不能是它背后的那个。 我选择将XMLDocumentFile作为我的程序组件(没有动态加载或其他操作)。 如果有什么问题,我会尝试使用Showmessage(XMLDocumentFile.XML.Text); 并且我会得到整个XML内容。 - AdelC
看起来你是对的。XMLDocumentFile 在某个地方出了问题 - 我把它当作动态文件处理,但它实际上是静态的。这是一个非常糟糕的错误。 我尝试过的旧代码使用了动态内容,但它没有工作,因为我必须创建 XML 文档。 - AdelC
如果您在动态创建TXMLDocument时未指定所有者,它将充当引用计数接口(文档中已经明确说明了这一点),因此您必须特别小心。最好改用NewXMLDocument()LoadXML...()函数,它们返回一个IXMLDocument接口。 - Remy Lebeau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接