2012-10-12 6 views
2

Следующий код генерирует исключение «InvalidPointer» каждый раз, когда я пытаюсь получить доступ к корню документа с помощью XMLDocument.DocumentElement;.Delphi: EInvalidPointer при попытке доступа к XMLDocument

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» и «DomDocument» всегда nil, хотя ни сам объект, ни его «IsEmptyDoc» свойства являются. Версия Delphi по-прежнему 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; 

 Смежные вопросы

  • Нет связанных вопросов^_^