c++ builder 中的 XMLDocument 类详解(13) - 遍历XML文件
2011-06-12 21:05
357 查看
//--------------------------------------------------------------------------- #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
//--------------------------------------------------------------------------- #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);//返回 } //---------------------------------------------------------------------------
相关文章推荐
- c++ builder 中的 XMLDocument 类详解(13) - 遍历XML文件
- c++ builder中的 XMLDocument 类详解(0) - xml 语法提示
- c++ builder 中的 XMLDocument 类详解(12) -关于 XML 属性
- C++ builder 中的 XMLDocument 类详解(15) – Firstnode 和Lastnode
- c++ builder中的 XMLDocument 类详解(1) - 要研究的问题
- c++ builder 中的 XMLDocument 类详解(12) -关于 XML 属性
- c++ builder中的 XMLDocument 类详解(0) - xml 语法提示
- c++ builder 中的 XMLDocument 类详解(8) -添加与删除结点
- c++ builder 中的 XMLDocument 类详解(2) - 记要
- c++ builder中的 XMLDocument 类详解(1) - 要研究的问题
- c++ builder 中的 XMLDocument 类详解(9) -关于 HasChildNodes 与 IsTextElement
- c++ builder 中的 XMLDocument 类详解(3) - 读取xml
- Delphi 中的 XMLDocument 类详解(13) - 关于 XML 属性
- c++ builder 中的 XMLDocument 类详解(4) - 攻取根目录下元素数
- Delphi 中的 XMLDocument 类详解(14) - 遍历 XML 文件
- 黄聪:Delphi 中的 XMLDocument 类详解(13) - 关于 XML 属性
- c++ builder 中的 XMLDocument 类详解(5) - 获取元素内容
- C++ builder 中的 XMLDocument 类详解(16) – 前一个节点、后一个节点和父节点
- 黄聪:Delphi 中的 XMLDocument 类详解(14) - 遍历 XML 文件
- c++ builder 中的 XMLDocument 类详解(6) - 访问节点属性