XML 容器是一種樹狀結構,技節點使用 cxxlXml_Node 這個類別,葉節點使用 cxxlXml_Content 這個類別,兩者都繼承自 cxxlXmlComposite 這個類別
// 將 XML_Node 匯出到 XmlStr
void cxxlFASTCALL ExportXML(std::wostream &XmlStr,
const Smart_Ptr<cxxlXml_Node> &XML_Node);
// 由 XmlStr 匯入建立 XML 容器傳回
// 若失敗傳回 NULL
// spirit 是建立 XML 容器用的
Smart_Ptr<cxxlXml_Node> cxxlFASTCALL ImportXML(std::wistream &XmlStr,
ISpirit *spirit = Spirit_Easy);
#include <sstream>
#include <iostream>
#include <locale>
#include <CXXLXMLCOMPOSITE.HPP>
using namespace std;
using namespace CxxlMan;
int main(int argc, char* argv[])
{
setlocale(LC_CTYPE, ""); // 指定系統現正使用中的地區語言做轉換
Smart_Ptr<cxxlXml_Node> Node_Ptr(new cxxlXml_Node(L"根節點"));
Smart_Ptr<cxxlXml_Content> Content_Ptr = Node_Ptr->AddContent(L"1.1");
Content_Ptr->SetContent(L"內容 1.1");
Node_Ptr = Node_Ptr->AddNode(L"1.2"); // 子節點
Node_Ptr->SetAttr(L"123", "屬性一");
Content_Ptr = Node_Ptr->AddContent(L""); // 無名內容
Content_Ptr->SetContent(L"無名內容 1.2.1");
Content_Ptr = Node_Ptr->AddContent(L"1.2.2");
Content_Ptr->SetContent(L"內容 1.2.2");
Node_Ptr = Node_Ptr->GetParent(); // 回父節點
Node_Ptr = Node_Ptr->AddNode(L"1.2"); // 技節點名稱可重複
Content_Ptr = Node_Ptr->AddContent(L"1.2.1");
Content_Ptr->SetContent(L"內容 1.2.1");
Content_Ptr = Node_Ptr->AddContent(L"1.2.1"); // 葉節點名稱可重複
Content_Ptr->SetContent(L"名稱重複 內容 1.2.1");
Node_Ptr = Node_Ptr->GetParent();
Node_Ptr = Node_Ptr->AddNode(L" 前有一個空格 1.3");
Content_Ptr = Node_Ptr->AddContent(L"1.3.1");
Content_Ptr->SetContent(L" 前有兩空格 ?<含禁用字元>/ ");
Node_Ptr = Node_Ptr->GetParent();
Node_Ptr = Node_Ptr->AddNode(L"無內容的節點");
Node_Ptr->SetAttr(L"123", "屬性一");
Node_Ptr->SetAttr(L"456", "屬性二");
Node_Ptr = Node_Ptr->GetParent();
// 匯出成 XML 文件
wostringstream wosXML;
ExportXML(wosXML,Node_Ptr);
wcout << wosXML.str() << endl;
// 測試由 XML 文件建立 XML 容器
wistringstream wisXML(wosXML.str());
Node_Ptr = ImportXML(wisXML);
// 檢視看看
wostringstream wosXML2;
ExportXML(wosXML2, Node_Ptr);
wcout << wosXML2.str() << endl;
return 0;
}