Delphi: EInvalidPointer при попытке доступа к XMLDocument
Следующий код генерирует исключение "InvalidPointer" каждый раз, когда я пытаюсь получить доступ к корню документа с XMLDocument.DocumentElement;
,
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.
Кто-нибудь знает, что вызывает это? Заранее спасибо.
1 ответ
Решение
Обратите внимание, что это не ответит на ваш вопрос, почему происходит то, что вы описали, но пытается предложить вам правильный способ сделать то, что вы хотите. Использовать 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;