如何在Delphi中读取XML文件?

时间:2013-07-12 12:05:26

标签: xml delphi delphi-xe3

这是我想要做的事情。 我的程序正常运行:

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。我怎么能这样做?

谢谢! :)

3 个答案:

答案 0 :(得分:5)

选项1:直接从磁盘加载

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

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

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

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

答案 1 :(得分:3)

使用Delphi XML Data Binding Wizard进行此操作。

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

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

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

使用此向导时有good tutorialnice video

答案 2 :(得分:3)

只需将loadXML更改为load('YourFileName.xml')

即可
procedure TForm1.Button1Click(Sender: TObject);
var
  XMLDoc: IXMLDOMDocument;
begin
  XMLDoc := CoDOMDocument.Create;
  XMLDoc.load('MyBooks.xml');
  Memo1.Lines.Text := XMLDoc.xml;
end;