NativeXml V4.02根节点添加属性问题

jxqn_liu 2012-07-30 03:46:46
这是写XML的部分代码

//设置导出到XML中的XML头
function DoSetXMLHead(AData: TdataSet): Boolean;
var
FNodeXML, SNodeXML: TXmlNode;
i: Integer;
begin
Result := False;
if not Assigned(XMLObject) then
XMLObject := TNativeXml.Create(Self);

try
XMLObject := TNativeXml.CreateName('DATAPACKET');
XMLObject.AttrText('Version', '2.0');
XMLObject.IndentString := ' '; //缩进空格数
XMLObject.XmlFormat := xfReadable;

FNodeXML := XMLObject.Root.NodeNew('METADATA');
SNodeXML := FNodeXML.NodeNew('FIELDS');

for i := 0 to AData.FieldCount - 1 do
begin
with SNodeXML.NodeNew('FIELD') do
begin
AttributeAdd('attrname', AData.Fields[i].FieldName);
AttributeAdd('fieldtype', 'string'); //待定
AttributeAdd('width', '20'); //待定
end;
end;

Result := True;
except
if XMLObject <> nil then XMLObject.Free;
end;
end;


这样生成出来的结果如下:

<?xml version="1.0" encoding="utf-8"?>
<DATAPACKET> //注意:这里的Version=2.0没有写入
<METADATA>
<FIELDS>
<FIELD attrname="ProviderID" fieldtype="string" width="20"/>
<FIELD attrname="TypeID" fieldtype="string" width="20"/>
<FIELD attrname="TypeName" fieldtype="string" width="20"/>
<FIELD attrname="Caption" fieldtype="string" width="20"/>
<FIELD attrname="Length" fieldtype="string" width="20"/>
</FIELDS>
</METADATA>
<ROWDATA>
</ROWDATA>
</DATAPACKET>


在上述代码中,通过
XMLObject := TNativeXml.CreateName('DATAPACKET');
XMLObject.AttrText('Version', '2.0');
写入不了根节点的值,请问这是什么原因造成的?
...全文
136 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
jxqn_liu 2012-07-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

Delphi(Pascal) code

{ // XMLObject.AttrText('Version', '2.0');}
XMLObject.Root.AttributeAdd('Version', '2.0');
[/Quote]
YES,谢谢兄台!
Frank.WU 2012-07-30
  • 打赏
  • 举报
回复

{ // XMLObject.AttrText('Version', '2.0');}
XMLObject.Root.AttributeAdd('Version', '2.0');
强大的XML组件,可以将对象直接存入XML文件,非常实用,而且开源! 很不错,推荐大家使用! 原来一直使用Delphi自带的TXMLDocument类来进行XML文件的读写,虽然麻烦了一点,但功能上来说还不错。只是有一个地方让我实在不舒服 - 每次创建TXMLDocument类实例的时候必须传入TComponent对象,这就意味着,如果我把对XML文件的读写封装到一个类里面,那么在创建这个自定义类的时候就必须也传入TComponent对象。 我尝试过很多方法,但是都无法避免,最后试着上网找了找,于是就找到了NativeXML这个库。 下载之后马上打开Demo看了看,cool,创建TNativeXML的时候只需要传入xml文件路径就可以,再往下看就让我开始惊喜了。它已经把大多数操作都封装好了,而且还具有把任意对象序列化的能力。 比如,你能把整个Form通过 TsdXmlObjectWriter = class(TPersistent) 类存入一个XML文件,下次再读取。这样使得远程传输对象变得很简单了。 下面就是一个使用NativeXML库的例子: 目标XML结构: 2000-01-01 delphi 代码: procedure WriteTest; var xml : TNativeXML; n_bs : TXMLNode; begin //建立节点 xml := TNativeXml.CreateName('bookshift'); xml.EncodingString := 'GB2312'; //输出风格为易读 xml.XmlFormat := xfReadable; //建立Book节点 n_bs := xml.Root.NodeNew('book'); //写入Book节点属性 n_bs.WriteAttribuiteString('author','test_author'); //建立Book节点下属date节点并写入值 n_bs.WriteString('date','2000-01-01'); xml.SaveToFile('test.xml'); end; 打开test.xml文件看看吧,和上面的格式一摸一样。 很简单吧,我用这个库重写了原来的XML访问类,大约节省了40%的代码量。

5,930

社区成员

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

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