//--------------------------------------------------------------------------- #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; TButton *btn_3; TXMLDocument *XMLDocument1; void __fastcall FormCreate(TObject *Sender); void __fastcall btn_1Click(TObject *Sender); void __fastcall btn_2Click(TObject *Sender); void __fastcall btn_3Click(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" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { XMLDocument1->LoadFromFile("D:\\code\\B_C_B\\XMLDocument\\test.xml"); } //--------------------------------------------------------------------------- void __fastcall TForm1::btn_1Click(TObject *Sender) { //获取根元素属性 _di_IXMLNodeList nodeList; _di_IXMLNode node; //根结点有几个属性 ShowMessage(IntToStr(XMLDocument1->DocumentElement->AttributeNodes->Count)); //通过属性名访问属性, 一般用 Attributes['属性名']} ShowMessage(XMLDocument1->DocumentElement->Attributes["备注"]); //通过属性位置访问属性, 必须用 AttributeNodes->noces[位置ID] ShowMessage(XMLDocument1->DocumentElement->AttributeNodes->Nodes[0]->Text); //但通过 AttributeNodes['属性名'] 也可以访问属性, 譬如 ShowMessage(XMLDocument1->DocumentElement->AttributeNodes->FindNode("备注")->Text); //AttributeNodes 是某个节点的属性列表, 它也是一个节点列表对象, 譬如 nodeList=XMLDocument1->DocumentElement->AttributeNodes; node=nodeList->Nodes[0]; ShowMessage(node->Text); node=nodeList->FindNode("备注"); ShowMessage(node->Text); } //--------------------------------------------------------------------------- void __fastcall TForm1::btn_2Click(TObject *Sender) { //访问第二个人的属性信息 _di_IXMLNodeList nodeList; _di_IXMLNode node; nodeList=XMLDocument1->DocumentElement->ChildNodes; node=nodeList->Nodes[1]; ShowMessage(IntToStr(node->AttributeNodes->Count)); ShowMessage(node->Attributes["职务"]); //副科长 ShowMessage(node->AttributeNodes->Nodes[0]->Text); //副科长 } //--------------------------------------------------------------------------- void __fastcall TForm1::btn_3Click(TObject *Sender) { //访问某个结点的所有属性 _di_IXMLNodeList nodeList; _di_IXMLNode node; int num; nodeList=XMLDocument1->DocumentElement->ChildNodes; node=nodeList->Nodes[0]; num=node->AttributeNodes->Count; for(int i=0;i<num;i++)//这不是num-1 ShowMessage(node->AttributeNodes->Nodes[i]->Text);//分别显示:科长 正局级 } //---------------------------------------------------------------------------