博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c++ builder 中的 XMLDocument 类详解(13) - 遍历XML文件
阅读量:5814 次
发布时间:2019-06-18

本文共 3303 字,大约阅读时间需要 11 分钟。

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
//---------------------------------------------------------------------------
 
#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);
//返回
}
//---------------------------------------------------------------------------
出处:
作者:

转载地址:http://ehtbx.baihongyu.com/

你可能感兴趣的文章
Lua语言特色
查看>>
vscode忽略node_module
查看>>
C#泛型-什么是泛型
查看>>
regsvr32.exe进程注册dll文件
查看>>
C# 单机Window 程序 sqlite 数据库实现
查看>>
JavaScript一些函数
查看>>
国务院关于积极推进“互联网+”行动的指导意见
查看>>
Matrix Factorization, Algorithms, Applications, and Avaliable packages
查看>>
图像配准转换
查看>>
mysql-This version of MySQL doesn’t yet support ‘LIMIT & IN/ALL/ANY/SOME 错误解决
查看>>
BIEE Demo(RPD创建 + 分析 +仪表盘 )
查看>>
Cocos2dx 3.0开发环境的搭建--Eclipse建立在Android工程
查看>>
iOS人脸识别核心代码(备用)
查看>>
基本概念复习
查看>>
C++:成员运算符重载函数和友元运算符重载函数的比较
查看>>
[Polymer] Introduction
查看>>
【iCore3 双核心板】例程三十:U_DISK_IAP_FPGA实验——更新升级FPGA
查看>>
前端技术的发展和趋势
查看>>
Android文件下载之进度检测
查看>>
重构第10天:提取方法(Extract Method)
查看>>