當前位置:編程學習大全網 - 編程語言 - 使用CMarkup類怎麽創建大數據量的XML文件

使用CMarkup類怎麽創建大數據量的XML文件

創建新XML文檔析修改現存XML文檔所些都利用MFC或STL字符串所實現簡單類關於CMarkup運行Zip文件右邊例願意通看源碼幾鐘加入自應用

特征

Cmarkup依據EDOM簡單XML析關鍵EDOM操作XML元素、屬性數據簡明集需要復雜XML特性避免讀量DOMSAX文檔

希望使用微軟MSXMLCMarkup工程CmarkupMSXML類全面演示通EDOM使用MSXML並且C++ COM語始

載包(看面zip文件鏈接)包含測試框工程源碼、Cmarkup類所測試示例、及編譯選項關於用商業用途詳細說明請看文章底部Licensing註意事項

面列CMarkup特征:

獨立:需要任何外部XML組件

:編譯工程類並且於文檔維持字符串及總計於字符串內存索引數組

快:析器相快建立索引數組

簡單:EDOM使創建、導航修改XML比簡單

MSXML:CMarkupMSXML類用EDOM包裝微軟XML服務MSXML編譯選項用演示類

UNICODE(統字符編碼標準):於WindowsNTWindowsCE平臺能夠編譯UNICODEWindowsNT UNICODEXML文檔流UTF-8文件內部用寬字符

UTF-8:於UTF-8文件接受返UTF-8字符串(確保_MBCS沒定義)

MBCS:於雙字節數據(定義_MBCS)與UTF-8兼容.

STL:CMarkupSTL類完全沒使用MFC演示要使用STL編譯選項

每數據XML

我經文件需要保存或傳遞信息或計算機A 發送信息塊計算機B總問題現:我要安排些數據格式現XML前能要考慮env類型例PATH=C:"WIN95; ini類型(些部組合)逗號限制或其些限制、或者固定字符串度現XML確定些問題答案某些候程序員氣餒需要些便於幫助析格式尖括號所些解決XML復雜性於低限度讀XML標簽匹配規則我建議閱讀CcodeProject站點Beginning XML - Chapter 2: Well-Formed XML

XML 更靈自等級加廣泛應用雖XML比限定格式用更字符需要良向壓縮需要擴展文檔信息類型XML靈性體現需要要求信息每消費者重寫邏輯程能夠保持舊信息標識並且制定用相同式增加新屬性元素

使用CMarkup

Cmarkup 基於壓縮文檔象模型(EDOM : "Encapsulated" Document Object Model,)簡單XML處理器關鍵套XML處理產效與DOM(Document Object Model)整DOM數象類型EDOM定義象:XML文檔EDOMXML原始吸引力—簡單關於完整文檔請看EDOM Specification.

CmarkUp 封裝XML文檔文本、結構前位置提供增加元素、導航元素屬性數據所文檔操作執行取決於前位置前孩位置前位置允許增加元素文檔位置需要明確指增加象文檔點CMarkup效命周期象直保持著用描述文檔字符串調用GetDoc.

查看free firstobject XML editor源碼用CMarkup創建、導航自XML文檔

創建XML文檔

於創建XML文檔需要實例化CMarkup象並調用AddElem創建根元素.位置調用AddElem("ORDER") 文檔簡單裝空ORDER元素. 調用AddChildElem 根元素面創建元素 (例:進入根元素內部層表示).面示例代碼創建XML文檔並返(內容)字符串

CMarkup xml;

xml.AddElem( "ORDER" );

xml.AddChildElem( "ITEM" );

xml.IntoElem();

xml.AddChildElem( "SN", "132487A-J" );

xml.AddChildElem( "NAME", "crank casing" );

xml.AddChildElem( "QTY", "1" );

CString csXML = xml.GetDoc();

些代碼產面XML根結點ORDER元素;註意始標簽 結束標簽結尾元素父面(深入或包含)父元素始標簽要前結束標簽要ORDER元素包含ITEM元素ITEM元素包含三字元素:SN、NAMEQTY;

132487A-J

crank casing

1

例所顯示能夠元素創建新元素需要調用IntoElem 移前主位置前元素位置面增加元素CMarkup索引保持前位置指針保證源碼更加短更簡單導航文件相同邏輯位置使用

導航XML文檔

面例所創建XML字符串用SetDoc加入CMarkup象能夠解析引導確進入創建同CMarkup象要設置前位置文檔始需要調用ResetPos.

面例csXML字符串CMarkup象我循環ORDER元素所ITEM元素並每項目序號數量

CMarkup xml;

xml.SetDoc( csXML );

while ( xml.FindChildElem("ITEM") )

{

xml.IntoElem();

xml.FindChildElem( "SN" );

CString csSN = xml.GetChildData();

xml.FindChildElem( "QTY" );

int nQty = atoi( xml.GetChildData() );

xml.OutOfElem();

}

於我發現每元素查詢元素前要調用IntoElem查詢完再調用OutOfElem 習慣於種導航類型知道檢查循環要確定每IntoElem 調用都與應OutOfElem 調用

增加元素屬性

面創建文檔例僅創建ITEM元素現例創建項目前內容加裁再增加數據源加SHIPMENT信息元素屬性段代碼演示能調用調用IntoElemAddElem代替AddChildElem,函數調用雖意味著更調用許認更直觀

CMarkup xml;

xml.AddElem( "ORDER" );

xml.IntoElem(); // inside ORDER

for ( int nItem=0; nItem<aItems.GetSize(); ++nItem )

{

xml.AddElem( "ITEM" );

xml.IntoElem(); // inside ITEM

xml.AddElem( "SN", aItems[nItem].csSN );

xml.AddElem( "NAME", aItems[nItem].csName );

xml.AddElem( "QTY", aItems[nItem].nQty );

xml.OutOfElem(); // back out to ITEM level

}

xml.AddElem( "SHIPMENT" );

xml.IntoElem(); // inside SHIPMENT

xml.AddElem( "POC" );

xml.SetAttrib( "type", csPOCType );

xml.IntoElem(); // inside POC

xml.AddElem( "NAME", csPOCName );

xml.AddElem( "TEL", csPOCTel );

段代碼產面XML根元素ORDER包含兩ITEM元素SHIPMENT元素ITEM元素全都包含SN、NAME、QTY元素SHIPMENT元素包含帶屬性類型POC元素NAME及TEL元素

132487A-J

crank casing

1

4238764-A

bearing

15

John Smith

555-1234

查找元素

FindElem FindChildElem用於兄弟元素選標簽名指定與標簽名相匹配元素發現元素前元素並且調用Find前位置兄弟或匹配兄弟

判斷元素索引調用兩Find間定要復位前位置看面例ITEM元素別創建XML文件能確定SN元素QTY元素前查找QTY元素前要調用ResetChildPos();

於用特定序號查找元素需要完全循環ITEM元素並比較SN元素數據搜索序號例同於先前導航例調用IntoElem 進入ORDER元素並且用FindElem("ITEM")替換FindChildElem("ITEM");其實兩種式都挺需要註意Find指定ITEM元素標簽名我忽略所其兄弟元素例SHIPMENT元素

CMarkup xml;

xml.SetDoc( csXML );

xml.FindElem(); // ORDER element is root

xml.IntoElem(); // inside ORDER

while ( xml.FindElem("ITEM") )

{

xml.FindChildElem( "SN" );

if ( xml.GetChildData() == csFindSN )

break; // found

}

編碼

ASCII編碼引用我所依靠字符碼128字符用英語編程使用ASCII碼便UTF-8編程與拉公***ASCII集相同

所使用字符集Unicode編碼集(UTF-8UTF-16UCS-2)於交互性及IE顯示真需要XML聲明進行描述像ISO-8859-1(西歐)字符集指定字符值比特且128255間便每字符仍使用比特Windows雙字節字符集像GB2312Shift_JISEUC-KR每字符都用或兩字節於些Windows字符集預處理需要定義 _MBCS 並要確定用戶操作系統設置合適編碼頁

關於用XML描述XML文檔前綴像需要通用SetDoc或Cmarkup構造函數傳遞結尾要包括車符根結點顯示行

xml.SetDoc( ""r"n" );

xml.AddElem( "island", "Cura?ao" );

  • 上一篇:沈陽機床的數控車床編輯指令代碼是什麽,,SMTCL-NC100系統
  • 下一篇:現在學什麽技術專業是最熱門的呢?
  • copyright 2024編程學習大全網