//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <msxmldom.hpp>
#include <XMLDoc.hpp>
#include <xmldom.hpp>
#include <XMLIntf.hpp>
//---------------------------------------------------------------------------
class
TForm1 :
public
TForm
{
__published:
// IDE-managed Components
TButton *btn_1;
TButton *btn_2;
TXMLDocument *XMLDocument1;
void
__fastcall btn_1Click(TObject *Sender);
private
:
// User declarations
public
:
// User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern
PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include <stdio.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
String ReadXml(_di_IXMLNode node)
{
_di_IXMLNodeList nodeList,attrList;
String str,strName,strValue,result;
int
i;
if
(!node->HasChildNodes)
return
""
;
attrList=node->AttributeNodes;
//根节点属性列表
nodeList=node->ChildNodes;
//根节点下的子节点列表
str=
"<"
+node->NodeName;
//先读取属性
for
(
int
i=0;i<attrList->Count-1;i++)
{
strName=attrList->Nodes[i]->Text;
//结点名字
strValue=attrList->Nodes[i]->Text;
//结点值
str=str+
" "
+strName+
"="
+AnsiQuotedStr(strValue,
'\"'
);
//AnsiQuotedStr定界符函数
}
str=str+
">"
+sLineBreak;
//sLineBreak是常量
//读取子结点
for
(
int
i=0;i<nodeList->Count;i++)
{
if
(nodeList->Nodes[i]->IsTextElement)
//如果他是文本结点则读它的数据
{
strName=nodeList->Nodes[i]->NodeValue;
//结点值
str=str+
"<"
+strName+
">"
+strValue+
"</"
+strName+
">"
+sLineBreak;
}
else
if
(nodeList->Nodes[i]->HasChildNodes)
//如果是不是文本结点而且有子结点
{
str=str+ReadXml(nodeList->Nodes[i]);
str=str+
"</"
+strName+
">"
+sLineBreak;
}
}
str=str+
"</"
+node->NodeName+
">"
;
//封口
return
str;
}
//调用测试
void
__fastcall TForm1::btn_1Click(TObject *Sender)
{
String str_an,s1,s2;
char
str[50];
XMLDocument1->LoadFromFile(
"D:\\code\\B_C_B\\XMLDocument\\test.xml"
);
//读取文件
s1=AnsiQuotedStr(XMLDocument1->Version,
'"'
);
//读出版本, 并添加双引号
s2=AnsiQuotedStr(XMLDocument1->Encoding,
'"'
);
//读出字符集, 并添加双引号
// str=Format("<?xml version=%s encoding=%s?>",s1,s2,2);//
sprintf
(str,
"<?xml version=%s encoding=%s?>"
,s1,s2);
// 这就是头文件了
str_an=AnsiString(str);
str_an=str_an+sLineBreak+ReadXml(XMLDocument1->DocumentElement);
ShowMessage(str_an);
//返回
}
//---------------------------------------------------------------------------
|
作者:
张东升 QQ:290387340
本博客注有“转”字样的为转载文章,其余为本人原创文章,转载请务必注明出处或保存此段。欢迎交流c++ 编程技术 QQ:290387340