程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++操作XML之創建(1)

C++操作XML之創建(1)

編輯:C++入門知識

 

-------------------------------------------XMLElement.h--------------------------------------------------

 

#include<string>

#include<vector>

#include<map>

#include<iostream>

using namespace std;

 

class XMLElement

{

public:

 XMLElement();

 

 void setElementName(const string &inName);

 

 void setAttribute(const string &inAttributeName,const string &inAttributeValue);

 

 void addSubElement(const XMLElement *inElement);

 

 void setTextNode(const string &inValue);

 

 string getMyInfo() const;

 

 string getMySubElemInfo() const;

 

 friend ostream& operator<<(ostream &outStream,const XMLElement &inElem);

 

protected:

 void writeToStream(ostream& outStream,int inIndentLevel=0) const;

 

 void indentStream(ostream& outStream,int inIndentLevel) const;

 

private:

 string mElementName;

 map<string,string> mAttributes;

 vector<const XMLElement*> mSubElements;

 string mTextNode;

};

 

 

---------------------------------------------XMLElement.cpp----------------------------------------------

 

#include "stdafx.h"

#include "XMLElement.h"

using namespace std;

 

XMLElement::XMLElement():mElementName("unnamed")

}

 

void XMLElement::setElementName(const std::string &inName)

{

 mElementName = inName;

}

 

void XMLElement::setAttribute(const std::string &inAttributeName, const std::string &inAttributeValue)

{

 mAttributes[inAttributeName] = inAttributeValue;

}

 

void XMLElement::addSubElement(const XMLElement *inElement)

{

 mSubElements.push_back(inElement);

}

 

void XMLElement::setTextNode(const std::string &inValue)

{

 mTextNode = inValue;

}

 

string XMLElement::getMyInfo() const

{

 string info = mElementName + " " ;

 for(map<string,string>::const_iterator it1 = mAttributes.begin(); it1 != mAttributes.end(); ++it1)

  info += it1->first +" " + it1->second +" ";

 info += mTextNode;

 return info;

}

 

string XMLElement::getMySubElemInfo() const

{

 string subInfo;

 for(vector< const XMLElement* >::const_iterator it2 = mSubElements.begin(); it2 != mSubElements.end(); ++it2)

 {

  subInfo += (*it2)->getMyInfo() + "\n";

 }

 return subInfo;

}

ostream& operator<<(ostream& outStream,const XMLElement& inElem)

{

 inElem.writeToStream(outStream);

 return (outStream);

}

 

void XMLElement::writeToStream(std::ostream &outStream, int inIndentLevel) const

{

 indentStream(outStream,inIndentLevel);

 outStream<<"<"<<mElementName;

 for(map<string,string>::const_iterator it1 = mAttributes.begin();it1 !=mAttributes.end(); ++it1)

 {

  outStream<<" "<<it1->first<<"=\""<<it1->second<<"\"";

 }

 outStream<<">";

 if(mTextNode !="")

  outStream<<mTextNode;

 else

 {

  outStream<<endl;

  for(vector< const XMLElement* >::const_iterator it2 = mSubElements.begin(); it2 != mSubElements.end(); ++it2)

   (*it2)->writeToStream(outStream,inIndentLevel+1);

   //(*it2)->writeToStream(outStream,inIndentLevel+1);

  indentStream(outStream,inIndentLevel);

 }

 outStream<<"</"<<mElementName<<">"<<endl;

}

 

void XMLElement::indentStream(std::ostream &outStream, int inIndentLevel) const

{

 for(int i=0;i<inIndentLevel;i++)

  outStream<< '\t';

}

 

-------------------------------------------------主函數.cpp--------------------------------------------------

 

// C++andXML.cpp : Defines the entry point for the console application.

//

 

#include "stdafx.h"

#include<string>

//#include<iostream>

#include "XMLElement.h"

//using namespace std;

int _tmain(int argc, _TCHAR* argv[])

{

 

  XMLElement myXMLElement;

  myXMLElement.setElementName("我的通訊錄");

  cout<<"請輸入自己的名字:";

  string myName;

  getline(cin,myName);

  cout<<"請輸入自己的電話號碼:";

  string myPhone;

  getline(cin,myPhone);

  myXMLElement.setAttribute(myName,myPhone);

 

  string friName;

  string friPhone;

  string friAttri;

  int i = 1;

  while(1)

  {

   cout<<"********************"<<endl;

   XMLElement *friXMLElement = new XMLElement();

   cout<<"請輸入好友"<<i<<"的名字(以0結束):";

   getline(cin,friName);

   if(friName=="0")

    break;

   cout<<"請輸入他(她)的電話號碼:";

   getline(cin,friPhone);

   cout<<"屬性為:";

   getline(cin,friAttri);

   string name ="好友";

   name += (char)(i+'0');

   friXMLElement->setElementName(name);

   friXMLElement->setAttribute(friName,friPhone);

   friXMLElement->setTextNode(friAttri);

   //cout<<friXMLElement->getMyInfo()<<endl;

   myXMLElement.addSubElement(friXMLElement);

   i++;

  }

  cout<<"我的通訊錄為:"<<endl;

  //cout<<myXMLElement.getMyInfo()<<endl;

  //cout<<myXMLElement.getMySubElemInfo()<<endl;

  cout<<myXMLElement;

  cout<<endl;

 system("pause");

 return 0;

}

 

 

 

------------------------------------------------程序測試-----------------------------------------------------

 

請輸入自己的名字:heyong

請輸入自己的電話號碼:1455

********************

請輸入好友1的名字(以0結束):liudehua

請輸入他(她)的電話號碼:1345

屬性為:friend

********************

請輸入好友2的名字(以0結束):zhangxueyou

請輸入他(她)的電話號碼:1873

屬性為:friend

********************

請輸入好友3的名字(以0結束):liming

請輸入他(她)的電話號碼:1890

屬性為:friend

********************

請輸入好友4的名字(以0結束):guofucheng

請輸入他(她)的電話號碼:1876

屬性為:friend

********************

請輸入好友5的名字(以0結束):0

我的通訊錄為:

<我的通訊錄heyong="1455">

        <好友1 liudehua="1345">friend</好友1>

        <好友2 zhangxueyou="1873">friend</好友2>

        <好友3 liming="1890">friend</好友3>

        <好友4 guofucheng="1876">friend</好友4>

</我的通訊錄>

 

請按任意鍵繼續. . .

 

 

 

作者heyongluoyao8

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved