2012-10-12 122 views
2

下面的代码每次尝试访问文档的根目录时都会引发“InvalidPointer”异常,其格式为XMLDocument.DocumentElement;Delphi:尝试访问XMLDocument时出现EInvalidPointer

begin 
     XMLDocument := TXMLDocument.Create(nil); // nil since we don't need an owner 
     AStream := TStream.Create; // stream for output as string 
     XMLDocument.loadFromXML(xml);// load string 
     if NOT (XMLDocument.IsEmptyDoc) then 
     begin  
     XMLDocument.Active := true; // actually automatically done by 'loadFromXML' 

     // get document root 
     HeadNode := XMLDocument.DocumentElement; 

     // add <id>-element, set ID as text 
     idNode := HeadNode.AddChild(XML_ID_PLAIN); 
     idNode.Text := id; 

     // ... 
    end; 
    end; 

字符串“XML”传递给loadFromXML(string)是有效的XML,但XmlDocument的属性“XML”和“DOM文档”总是nil,尽管无论是物体本身还是其“IsEmptyDoc”属性。德尔福版本仍然是2007.

有没有人有一个想法是什么原因造成的?提前致谢。

+2

我有一个预感,如果你告诉我们什么类型的XMLDocument变量,答案就会变得明显。 –

回答

6

请注意,这不会回答你的问题为什么会发生你所描述的,但试图为您提供正确的方式来做,你想要什么。使用LoadXMLData函数,而不是自己创建TXMLDocument实例。这里有一个示例代码:

uses 
    XMLIntf, XMLDoc; 

const 
    XMLString = 
    '<?xml version="1.0" encoding="UTF-8"?>' + 
    '<Setup>' + 
    ' <FirstNode>First Node Value</FirstNode>' + 
    ' <SecondNode>Second Node Value</SecondNode>' + 
    '</Setup>'; 

procedure TForm1.Button1Click(Sender: TObject); 
var 
    HeadNode: IXMLNode; 
    XMLDocument: IXMLDocument; 
begin 
    try 
    XMLDocument := LoadXMLData(XMLString); 
    HeadNode := XMLDocument.DocumentElement; 
    if Assigned(HeadNode) then 
     ShowMessage(HeadNode.NodeName); 
    except 
    on E: Exception do 
     ShowMessage(E.Message); 
    end; 
end; 
相关问题