delphi7写的个人笔记本(模版功能已经实现)

就本程序中使用的xml存储方法,我就以我使用的方法为介绍,供大家看看。。。。。。

delphi7对于xml已经有很好的支持,对xml实现的主要类是TXMLDocument类,这个控件在internet选项中。TXMLDocument控件是不可视控件。先给你们看我写的一个解析XML文件的一段程序吧。

 

先看一下如何解析XML文件:

procedure TForm3.FormCreate(Sender: TObject);
var
  xn:IXMLNode;
  nodelist:IXMLNodeList;
  i,nCount:Integer;
begin

  XMLDocument1.LoadFromFile('xuexi/xuexi.xml');
  XMLDocument1.Active := True;
 
  nodelist := XMLDocument1.DocumentElement.ChildNodes;
  nCount := nodelist.Count;
 
  for  i := 0 to nCount-1 do
    begin
      xn:=nodelist.Get(i);
      with lv1.Items.Add do   //lv1是listview控件,该控件主要做的页面数据显示
        begin
          Caption:=xn.ChildNodes.Nodes['title'].Text;
          subitems.Add(xn.ChildNodes.Nodes['description'].Text);
          subitems.Add(xn.ChildNodes.Nodes['writeTime'].Text);
        end;
    end;

end;

你可以看到加载xml文件TXMLDocument已经有了LoadFromFile这个过程,其实TXMLDocument在使用的过程中先生成IXMLDocument,我们是通过使用IXMLDocument来操作XML的,下面来说一下本段程序中最主要的不部分。

nodelist := XMLDocument1.DocumentElement.ChildNodes;
nCount := nodelist.Count;

nodelist定义为IXMLNodeList类型,XMLDocument1.DocumentElement.ChildNodes;DocumentElement返回的是根节点,它的返回值是IXMLNode,而XMLDocument1.DocumentElement.ChildNodes返回的是IXMLNodeList,这个我们可以看作是根节点下子节点的集合,而一般我们操作的也就是这些子节点。

nodelist.count返回的根节点下的子节点数量,这里我要说明一下,对于XML文件中对于子节点的定义,如

<?xml version="1.0" encoding="GBK"?>

<xuexi>

<records name="tttt">
<title>tttt</title>
<mainInfomation>hhhhhhhhhhh</mainInfomation>
<description>yyyy</description>
<writeTime>2013-07-28 14:12:41</writeTime>

</records>

<records name="mmm">

<title>mmm</title>
<mainInfomation>mmmmm</mainInfomation>
<description>MM</description>
<writeTime>2013-07-28 14:12:41</writeTime>

</records>
</xuexi>

在这里ndelist.count返回的值应该是2,也就是两个records标签所代表的范围。IXMLNodeList对于节点坐标的安排和数组一样,都是从0开始,如果你想得到根节点下的第一个节点的话,那么可以使用nodelist.get(0),该函数返回的是IXMLNode,通过IXMLNode我们访问其中特定标签的你内容。如xn.childNodes.nodes['title'].text。

对于上面的XML文件,我定义的根节点下的子节点的名称都是一样的,那么这样的XML文件在解析的时候怎么处理!

你可以看到,虽然根节点下的子节点的名称是一样的,但是我设置了它的属性name,通过属性名称来查找对应的records节点。

在delphi7中可以使用这样的方法nodeList.Get(0).GetAttributeNS('name',''),这个返回的一个string类型数据;

在操作XML的过程中我还遇到了一个中文不能保存的问题,我开始设置XML编码为utf-8,在保存的时候总是失败,后面在网上查额资料,改成了GBK之后就可以了。。插(在delphi7中关于boolean的true和false,在delphi7中-1和true相等,0和false相等)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值