以下代码每当我尝试使用XMLDocument.DocumentElement;
访问文档的根时都会抛出“InvalidPointer”异常。
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;
传递给loadFromXML(string)
的字符串“xml”是有效的XML,但XMLDocument的属性“XML”和“DOMDocument”始终是nil
,即使对象本身也不是它的“IsEmptyDoc”属性是。德尔福版仍然是2007年。
有谁知道是什么原因造成的?提前谢谢。
答案 0 :(得分: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;