这是我想要做的事情。 我的程序正常运行:
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。我怎么能这样做?
谢谢! :)
答案 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内部数据的过程比使用普通IXMLDocument
或IXMLDOMDocument
更容易。
该单元包含从文件或字符串加载XML的方法。
使用此向导时有good tutorial和nice 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;