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); //返回 } //--------------------------------------------------------------------------- |