我是 Delphi 的新手,现在我必须阅读创建XML。我的代码如下:
unit writexml1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, xmldom, XMLIntf, StdCtrls, msxmldom, XMLDoc;
type
TForm1 = class(TForm)
XMLDocument1: TXMLDocument;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.SaveClick(Sender: TObject);
var
rootName: String;
childNode: String;
attrChild: string;
iXml: IDOMDocument;
iRoot, iNode, iNode2, iChild, iAttribute: IDOMNode;
XMLDoc: TXMLDocument;
begin
XMLDoc.Active := False;
XMLDoc.XML.Text := '';
XMLDoc.Active := True;
XMLDoc.SaveToFile('C:\Documents and Settings\a\Desktop\zulfa.xml');
iXml := XMLDoc.DOMDocument;
iRoot := iXml.appendChild(iXml.createElement('xml'));
iNode := iRoot.appendChild(iXml.createElement('test'));
iNode.appendChild(iXml.createElement('test2'));
iChild := iNode.appendChild(iXml.createElement('test3'));
iChild.appendChild(iXml.createElement('Simple calue'));
iNode.insertBefore(iXml.createElement('test4'), iChild);
iNode2 := iNode.cloneNode(True);
iRoot.appendChild(iNode2);
iAttribute := iXml.createAttribute('color');
iAttribute.nodeValue := 'red';
iNode2.attributes.setNamedItem(iAttribute);
end;
end.
问题是,当单击保存按钮时,它显示了异常,异常是
Project writexml1.exe raised exception class EAccessViolation with message
'Access violation at address 004391B9 in module writexml.exe
4条答案
按热度按时间8wtpewkr1#
你的代码看起来有点复杂。我建议:忘记
TXMLDocument
和IDOMDOCUMENT
,使用IXMLDOCUMENT
代替(使用它的方式几乎与TXmlDocument
相同,但您不需要组件)。这段代码应该演示它是多么简单:
这就是生成的文件的样子:
希望这能帮上忙
PS:这个示例只需要Units XMLIntf 和 XmlDoc,所以您可以稍微整理一下您的 * 使用 *。
bfrts1fy2#
您需要先创建
XMLDoc
示例,然后才能使用它:6gpjuf903#
SaveClick()
正在声明一个本地XMLDoc
变量,在使用i之前,该变量没有分配一个有效的TXMLDocument
对象。您在TForm
上有一个单独的XMLDocument1
组件,但您没有使用它。请删除XMLDoc
并使用XMLDocument1
。此外,您还直接访问了底层的
DOMDocument
,请使用TXMLDocument
自己的方法构建XML,不要下拉到DOM层,除非您需要访问特定于供应商的功能(在这种情况下您不需要)。试试这个:
生成以下XML:
也就是说,使用
IXMLDocument
而不是TXMLDocument
,就像@knowledgestacker建议的那样,通常是更好的选择。mspsb9vt4#
我写了一个库来管理和简化XML文件的工作,你可以检查它here。
不知道你想创建什么样的结构,但这里有一个例子:
它将生成以下XML: