1

这是我想做的事情。我的程序运行良好:

XMLText =  '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' +
'<book xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">' +
  '<title>Harry Potter</title>' +
  '<author>J. K. Rowling.</author>' +
  '<length>400</length>' +
'</book>';


procedure TForm1.Button1Click(Sender: TObject);
var
XMLDoc: IXMLDOMDocument;
Node, SibNode: IXMLDOMNode;
begin
  Memo1.Clear;
  XMLDoc := CoDOMDocument.Create;
  XMLDoc.loadXML(XMLText);
end;

现在我想从项目所在的同一文件夹中导入包含 6000 本书 (books.xml) 的 XML 文件,而不是 const XMLText。我怎样才能做到这一点?

谢谢!:)

4

3 回答 3

6

选项 1:直接从磁盘加载

IXMLDomDocument有一个load接受文件名的方法。您可以使用该方法代替loadXML您当前使用的方法。

选项2:首先将文件加载到字符串中

或者,您可以先将文件加载到字符串中。在这种情况下,我几乎找不到任何理由这样做,但知道它永远不会有害。:)

看一下TStringStream,它有一种LoadFromFile从磁盘加载文件的方法。您可以使用它将整个加载books.xml到内存中。加载文件后,您可以将 stringstreams 的DataString属性传递给该loadXML方法。此属性将流的全部内容(包含 XML)作为字符串返回。

于 2013-07-12T12:08:20.307 回答
4

为此,请使用 Delphi XML 数据绑定向导

它将在您的 XML 文件周围生成一个带有 Delphi 包装器对象的单元(或者如果您有一个描述 XML 的 XSD 文件)。

这些包装器基于与您现在使用IXMLDocument的非常相似的包装器IXMLDOMDocument,并在其周围添加一个层,允许您在 Delphi 编译器的更多支持下访问您的数据,通常使处理 XML 中的数据的过程更加容易比使用普通IXMLDocumentIXMLDOMDocument.

该单元包含从文件或字符串加载 XML 的方法。

有一个很好的教程和一个关于使用这个向导的精彩视频。

于 2013-07-12T21:17:30.310 回答
3

只需更改loadXMLload('YourFileName.xml')

procedure TForm1.Button1Click(Sender: TObject);
var
  XMLDoc: IXMLDOMDocument;
begin
  XMLDoc := CoDOMDocument.Create;
  XMLDoc.load('MyBooks.xml');
  Memo1.Lines.Text := XMLDoc.xml;
end;
于 2013-07-12T21:34:02.257 回答