如何使用TXMLDocument读写带xmlns属性的XML?

lumj 2012-01-27 08:13:56

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BookId" version="2.0">
<metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf">
.

如何用TXMLDocument写出上面这段xml,主要是其中xmlns属性的读写
...全文
234 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lumj 2012-01-30
  • 打赏
  • 举报
回复
谢谢大虾,结帖!
lumj 2012-01-30
  • 打赏
  • 举报
回复
谢谢大虾,结帖!
erhan 2012-01-30
  • 打赏
  • 举报
回复

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, xmldom, XMLIntf, StdCtrls, msxmldom, XMLDoc, ExtCtrls;

type
TForm1 = class(TForm)
Panel1: TPanel;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
xd1: TXMLDocument;
mm,nn: IXMLNode;
begin
//生成
xd1 := TXMLDocument.Create(application);
xd1.Active := True;
xd1.Encoding := 'utf-8';
xd1.StandAlone := 'yes';
xd1.Version := '1.0';
xd1.Options := [doNodeAutoIndent];
mm := xd1.Node.AddChild('package','http://www.idpf.org/2007/opf');
mm.SetAttributeNS('unique-identifier','','BookId');
mm.SetAttributeNS('version','','2.0');

nn := mm.AddChild('metadata',mm.NamespaceURI);
nn.DeclareNamespace('','http://www.idpf.org/2007/opf');
nn.DeclareNamespace('dc','http://purl.org/dc/elements/1.1/');
nn.DeclareNamespace('opf','http://www.idpf.org/2007/opf');
nn.AttributeNodes.Delete('xmlns','');

xd1.SaveToFile('d:\test1.xml');
xd1.Active := False;
xd1.Destroy;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
xd1: TXMLDocument;
i: integer;
mNode,mm: IXMLNode;
begin
//读取
xd1 := TXMLDocument.Create(application);
xd1.FileName := 'd:\test1.xml';
xd1.Active := True;
mNode := xd1.ChildNodes.FindNode('package');
showmessage(mNode.NamespaceURI);
mNode := mNode.ChildNodes.FindNode('metadata');
for i:=0 to mNode.AttributeNodes.Count -1 do
begin
mm := mNode.AttributeNodes.Get(i);
showmessage(mm.LocalName);
end;
showmessage(mNode.FindNamespaceURI('dc'));
showmessage(mNode.FindNamespaceURI('opf'));
xd1.Active := False;
xd1.Destroy;

end;

end.
lumj 2012-01-29
  • 打赏
  • 举报
回复
求高手解答!

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧