【问题标题】:Delphi: EInvalidPointer when trying to access XMLDocumentDelphi:尝试访问 XMLDocument 时出现 EInvalidPointer
【发布时间】:2012-10-12 12:38:18
【问题描述】:

每当我尝试使用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”属性都不是。 Delphi 版本仍然是 2007。

有人知道是什么原因造成的吗?提前致谢。

【问题讨论】:

  • 我有一种预感,如果你告诉我们XMLDocument变量是什么类型,答案就会变得显而易见。

标签: xml delphi root delphi-2007 txmldocument


【解决方案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;

【讨论】:

    猜你喜欢
    • 2021-12-11
    • 1970-01-01
    • 2016-05-25
    • 1970-01-01
    • 2014-09-22
    • 1970-01-01
    • 1970-01-01
    • 2016-04-19
    • 2018-07-17
    相关资源
    最近更新 更多