{-----------------------------------------
建立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;