delphi操做xml

{-----------------------------------------
建立XML文檔,以及節點
------------------------------------------}
procedure TForm1.CreateXMLClick(Sender: TObject);
var
  pNode,cNode: IXMLNode;                   {定義兩個節點: 父節點、子節點}
begin
  xmldcmnt1.XML.Clear;
  xmldcmnt1.Active := True;                {必須先激活}
  xmldcmnt1.Version := '1.0';              {設置版本}
  xmldcmnt1.Encoding := 'GB2312';          {設置語言}node

  pNode := xmldcmnt1.AddChild('科室名單'); {添加的第一個節點是根節點, 如今的 pNode 是根節點}
  pNode.SetAttribute('備註', '測試');      {爲根節點設置屬性}ide

  pNode := pNode.AddChild('人員');         {爲根節點添加子節點, 如今的 pNode 是 "人員" 節點}
  pNode.SetAttribute('職務', '科長');      {設置屬性}
  pNode.SetAttribute('備註', '正局級');測試

  cNode := pNode.AddChild('姓名');          {爲 pNode 添加子節點, 返回值 cNode 指向了新添加的節點}
  cNode.Text := '張三';orm

  cNode := pNode.AddChild('性別');
  cNode.Text := '男';xml

  cNode := pNode.AddChild('年齡');
  cNode.Text := '34';
end;對象

<?xml version="1.0" encoding="GB2312"?>
<科室名單 備註="測試">
     <人員 職務="科長" 備註="正局級">
           <姓名>張三</姓名>
           <性別>男</性別>
           <年齡>34</年齡>
     </人員>
</科室名單>文檔


{-----------------------------------------
添加XML節點
------------------------------------------}
procedure TForm1.Button1Click(Sender: TObject);
var
  newNode, newNodeAdd: IXMLNode;
begin
  newNode := xmldcmnt1.DocumentElement.AddChild('人員');
  newNode.Attributes['職務'] := '祕書';it

  newNodeAdd := newNode.AddChild('姓名');
  newNodeAdd.Text := '小翠';io

  newNodeAdd := newNode.AddChild('性別');
  newNodeAdd.Text := '女';class

  Memo1.Lines := xmldcmnt1.XML; {查看}
  {會在尾部增長:
   <人員 職務="祕書"><姓名>小翠</姓名><性別>女</性別></人員>
  }
end;

<?xml version="1.0" encoding="GB2312"?>
<科室名單 備註="測試">
    <人員 職務="科長" 備註="正局級">
        <姓名>張三</姓名>
        <性別>男</性別>
        <年齡>34</年齡>
    </人員>
    <人員 職務="祕書">
       <姓名>小翠</姓名>
       <性別>女</性別>
    </人員>
</科室名單>


{-----------------------------------------
判斷節點的類型
------------------------------------------}
//判斷是不是支節點
procedure TForm1.Button1Click(Sender: TObject);
var
  node: IXMLNode;
begin
  node := xmldcmnt1.DocumentElement.ChildNodes[0]; {這是"人員"節點}

  if node.HasChildNodes and not node.IsTextElement then
    ShowMessage('是支節點'); {是支節點}
end;


//判斷是不是葉節點
procedure TForm1.Button2Click(Sender: TObject);
var
  node: IXMLNode;
begin
  node := xmldcmnt1.DocumentElement.ChildNodes[0].ChildNodes[0]; {這是"姓名"節點}

  if node.IsTextElement then
    ShowMessage('是葉節點'); {是葉節點}
end;


//判斷是不是文本節點
procedure TForm1.Button3Click(Sender: TObject);
var
  node: IXMLNode;
begin
  node := xmldcmnt1.DocumentElement.ChildNodes[0].ChildNodes[0].ChildNodes[0];
  {這是"張三"那個文本節點}

  if node.NodeName='#text' then
    ShowMessage('是文本節點'); {是文本節點}
end;


//判斷是不是空節點
procedure TForm1.Button4Click(Sender: TObject);
var
  node: IXMLNode;
begin
  node := xmldcmnt1.DocumentElement.ChildNodes[4];
  {這是根節點下的第五個節點: "輔助人員", xml 中設爲空}

  if not node.HasChildNodes then
    ShowMessage('是空節點'); {是空節點}
end;


{-----------------------------------------
NodeValue 和NodeName的區別
------------------------------------------}
procedure TForm1.Button1Click(Sender: TObject);
var
  node: IXMLNode;
begin
  node := xmldcmnt1.DocumentElement;

  node := node.ChildNodes[0]; {如今的 node 指向了第一我的員節點}

  //屬性值: NodeValue 是可讀寫的
  ShowMessage(node.AttributeNodes[0].NodeValue); {科長}
  node.AttributeNodes[0].NodeValue := '正科長';
  ShowMessage(node.AttributeNodes[0].NodeValue); {正科長}

  //屬性名: NodeName 是隻讀的
  ShowMessage(node.AttributeNodes[0].NodeName);  {職務}
  //node.AttributeNodes[0].NodeName := 'xxx';    {若是企圖給屬性名賦值會出錯}

  node := node.ChildNodes[0]; {如今的 node 指向了第一我的員"張三"的姓名節點}

  //節點值: NodeValue 是可讀寫的
  ShowMessage(node.NodeValue); {張三}
  node.NodeValue := '張老三';
  ShowMessage(node.NodeValue); {張老三}

  //節點名: NodeName 是隻讀的
  ShowMessage(node.NodeName);  {姓名}
  //node.NodeName := 'xxx';    {若是企圖給節點名賦值會出錯}
end;

 

{-----------------------------------------
某節點的上一個節點、下一個節點、父節點
------------------------------------------}
procedure TForm1.Button1Click(Sender: TObject);
var
  node,nodeX: IXMLNode;
begin
  node := XMLDocument1.DocumentElement;
  node := node.ChildNodes[1];
  node := node.ChildNodes[1];
  {如今的節點 node 指向了咱們的例子中的第二我的員"李四"}

  ShowMessage(node.ChildNodes[0].NodeValue); {女}

  //獲取該節點的上一個節點, 它上一個節點應該是李四的姓名
  nodeX := node.PreviousSibling;  {PreviousSibling}
  ShowMessage(nodeX.NodeValue);   {李四}

  //獲取該節點的下一個節點, 它下一個節點應該是李四的年齡
  nodeX := node.NextSibling;      {NextSibling}
  ShowMessage(nodeX.NodeValue);   {43}

  //獲取該節點的父節點
  nodeX := node.ParentNode;       {ParentNode}
  ShowMessage(nodeX.NodeName);    {人員}
end;


{-----------------------------------------
對象的 XML 屬性
------------------------------------------}
//XMLDocument1 對象的 XML 屬性
procedure TForm1.Button1Click(Sender: TObject);
begin
  {前面咱們常常用這句話, 由於這裏的 Lines 與 XML 同屬於 TStrings}
  Memo1.Lines := XMLDocument1.XML;

  {若是不怕麻煩, 這樣寫也能夠:}
  Memo1.Lines.Text := XMLDocument1.XML.Text;

  {若是知道了這一點, 那 XML 屬性的功能可就多了, 而且這裏的 XML 屬性是可寫的}
  {不過這裏要談的是節點的 XML 屬性}
end;


//根節點的 XML 屬性
procedure TForm1.Button2Click(Sender: TObject);
var
  node: IXMLNode;
begin
  {先看根節點: XMLDocument1.DocumentElement}
  node := XMLDocument1.DocumentElement;

  //Memo1.Lines := node.XML; {這一句會出錯}
  {由於節點的 XML 屬性是 WideString 類型的, 應該這樣:}
  Memo1.Lines.Text := node.XML; {將會讀出根節點與根節點包含的全部內容}

  {還有一個更大的區別: 節點的 XML 是隻讀的!}
end;


//子節點的 XML 屬性
procedure TForm1.Button3Click(Sender: TObject);
var
  node: IXMLNode;
begin
  node := XMLDocument1.DocumentElement;
  node := node.ChildNodes[0];

  Memo1.Lines.Text := node.XML; {會顯示一個子節點的所有}
end;


//屬性的 XML 屬性
procedure TForm1.Button4Click(Sender: TObject);
var
  node: IXMLNode;
begin
  node := XMLDocument1.DocumentElement;
  node := node.AttributeNodes[0]; {屬性也是 IXMLNode 類型的}

  ShowMessage(node.NodeName);  {備註}
  ShowMessage(node.NodeValue); {測試}

  {用 XML 屬性一次把他們都讀出來:}
  ShowMessage(node.XML);       {備註="測試"}
end;


//葉節點的 XML 屬性
procedure TForm1.Button5Click(Sender: TObject);
var
  node: IXMLNode;
begin
  node := XMLDocument1.DocumentElement;
  node := node.ChildNodes[0];
  node := node.ChildNodes[0];
  node := node.ChildNodes[0]; {這就是葉節點了}

  ShowMessage(node.XML);  {張三}

  {這時的 XML 屬性和 Text 屬性同樣了}   ShowMessage(node.Text); {張三} end;

相關文章
相關標籤/搜索