VC解析XML--使用CMarkup類解析XML

?經過今天嘗試MFC解析XML串,也算有了不少收獲,總結一下。
?????????我是使用的CMarkup類對XML進行操作。
?????????
?????????CMarkup好象都是先從一個xml文件里面把內容讀出來,再進行解析,搞得我恨不得要把我的CString寫到xml文件里面再取出來了。
?????????如果需要直接讀取CString,可以直接用

???????? CMarkup::SetDoc方法。
?????????最后其他的方法轉載別人的使用例子,寫得很全。
來自http://hi.baidu.com/yxifu/blog/item/fa1569225bda52a44623e8f0.html

(一)?先講一下XML中的物殊字符,手動填寫時注意一下。

字符??????????????????字符實體
&??????????????????????&或&
'??????????????????????'或'
>??????????????????????>或>
<??????????????????????&lt;或&<
"???????????????????????&quot;或"

(二)?CMarkup類的源代碼。

這是目前的最新版本;

這是官網示例文件,取出里面的Markup.cpp和Markup.h,導入你的工程里面,CMarkup類就可以用了;

下載地址:http://www.firstobject.com/Markup83.zip

(三)?創建一個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"?);
xml.Save("c:\\UserInfo.xml");

效果如下:

<ORDER><ITEM><SN>132487A-J</SN><NAME>crank?casing</NAME><QTY>1</QTY></ITEM></ORDER>
(四)?瀏覽特定元素
CMarkup?xml;
xml.Load("UserInfo.xml");
while?(?xml.FindChildElem("ITEM")?) {xml.IntoElem();xml.FindChildElem(?"SN"?);CString?csSN?=?xml.GetChildData();xml.FindChildElem(?"QTY"?);int?nQty?=?atoi(?xml.GetChildData()?);xml.OutOfElem(); }
(五)增加元素和屬性
添加在最后面,使用的是AddElem;添加在最前面,使用InsertElem。
CMarkup?xml;
xml.Load("c:\\UserInfo.xml");
xml.AddElem(?"ORDER"?);
xml.IntoElem();?//?進入?ORDER



????xml.AddElem(?"ITEM"?);xml.IntoElem();?//?進入?ITEMxml.AddElem(?"SN",?"4238764-A"?);?//添加元素xml.AddElem(?"NAME",?"bearing"?);//添加元素xml.AddElem(?"QTY",?"15"?);//添加元素xml.OutOfElem();?//?退出?ITEM?
xml.AddElem(?"SHIPMENT"?);
xml.IntoElem();?//?進入?SHIPMENT
xml.AddElem(?"POC"?);//添加元素
xml.SetAttrib(?"type",?"non-emergency");//添加屬性
xml.IntoElem();?//?進入?POC
xml.AddElem(?"NAME",?"John?Smith");//添加元素
xml.AddElem(?"TEL",?"555-1234");//添加元素
xml.Save("c:\\UserInfo.xml");

?

效果如下:

<ORDER><ITEM><SN>132487A-J</SN><NAME>crank?casing</NAME><QTY>1</QTY></ITEM><ITEM><SN>4238764-A</SN><NAME>bearing</NAME><QTY>15</QTY></ITEM><SHIPMENT><POC?type="non-emergency"><NAME>John?Smith</NAME><TEL>555-1234</TEL></POC></SHIPMENT></ORDER>

(六)?修改元素和屬性

如將POC中的屬性type改成:change;

元素TEL改成:123456789

???????CMarkup?xml;
?if?(xml.Load("UserInfo.xml"))
?{
??CString?strUserID?=?_T("");
??xml.ResetMainPos();
??if?(xml.FindChildElem("SHIPMENT"))
??{
???xml.IntoElem();
???if?(xml.FindChildElem("POC"))
???{
????xml.IntoElem();
????CString?str_type=xml.GetAttrib("type");
????MessageBox(str_type);
????xml.SetAttrib("type","change");
????strUserID?=?xml.GetData();
????
????if?(xml.FindChildElem("TEL"))
????{
?????xml.IntoElem();
?????xml.SetData("123456789");
?????xml.Save("UserInfo.xml");
?????return;
????}
???}
??}
?}

(七)刪除元素:

刪除SN=132487A-J的項目。

CMarkup?xml;
?if?(xml.Load("UserInfo.xml"))
?{
??CString?strUserID?=?_T("");
??xml.ResetMainPos();
??if?(xml.FindChildElem("ITEM"))
??{
???xml.IntoElem();
???CString?str_sn;
???xml.FindChildElem("SN");
???str_sn=xml.GetChildData();
???if(str_sn=="132487A-J")
???{
????xml.RemoveElem();
????xml.Save("UserInfo.xml");
???}
??}
?}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/283943.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/283943.shtml
英文地址,請注明出處:http://en.pswp.cn/news/283943.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MongoDB精華總結

概述 MongoDB是屬于文檔型的NoSQL數據庫&#xff0c;也就是文檔數據庫。文檔數據庫區別于傳統的其它數據庫&#xff0c;它是用來管理文檔。在傳統的數據庫中&#xff0c;信息被分割成離散的數據段&#xff0c;而在文檔數據庫中&#xff0c;文檔是處理信息的基本單位&#xff0c…

認清性能問題

本文翻譯自 Thinking Clearly About Performance 這是我三年前讀到的一篇關于性能問題的好文&#xff0c;讀完后還覺不過癮&#xff0c;怕理解的不夠遂又翻譯了一遍&#xff0c;這也是當年我的第一次翻譯。 這幾年來每次碰到性能問題&#xff0c;我都會想起這篇文章&#xff0c…

字節也開始縮招了...

閱讀本文大概需要6分鐘。最近和一個字節技術總監聊天&#xff0c;得知他們公司居然也開始縮招了。這真讓人感到意外&#xff0c;畢竟頭條這些年是以極速擴張而聞名。搜了搜新聞還真是&#xff0c;這也意味著互聯網行業最后一個堅挺的大戶也在開源節流了。最近互聯網行業的情況真…

實現打字效果

摘自一個表白網站的效果。 方法&#xff1a; substr() 可在字符串中抽取從 第一個參數表示從指定的下標&#xff0c;第二個參數表示抽取指定數目的字符。 indexOf() 方法可返回某個指定的字符串值在字符串中首次出現的位置&#xff0c;兩個參數&#xff0c;第一位指定的字符串&…

php優化-》常用到的部分優化

1.循環內部盡可能不要聲明變量&#xff1b; 2.在可以用PHP內部字符串操作函數的情況下&#xff0c;盡量不要用正則表達式&#xff1b; 3.foreach效率更高&#xff0c;盡量用foreach代替while和for循環&#xff1b; 4.用單引號替代雙引號引用字符串&#xff1b; 5.盡量的少進行文…

簡述:分布式CAP理論和BASE理論

目錄 一、什么是CAP&#xff1f; Consistency (一致性)&#xff1a; Availability (可用性): Partition Tolerance (分區容錯性): 二、取舍策略 三、Base理論 1、基本可用 2、軟狀態 3、最終一致性 四、常見產品 Ereka Zookeeper 五、總結 一、什么是CAP&#xf…

WinForm(四)一種實現登錄的方式

首先聲明&#xff0c;這只是一種登錄方式&#xff0c;并不是最好的方式&#xff0c;用這個例子為了說明登錄窗體和Application的關系。在登錄前&#xff0c;定義了用戶實體&#xff0c;然后是一個通用的類&#xff0c;存放進程中當前登錄的用戶&#xff0c;所以CurrentUser是靜…

Java多線程4:synchronized鎖機制

臟讀 一個常見的概念。在多線程中&#xff0c;難免會出現在多個線程中對同一個對象的實例變量進行并發訪問的情況&#xff0c;如果不做正確的同步處理&#xff0c;那么產生的后果就是"臟讀"&#xff0c;也就是取到的數據其實是被更改過的。 按照正常來看應該打印&quo…

mysql 日期時間類型 自動轉型 及 運算

日期時間類型自動轉型 -- now()、字符串、數字轉datetime類型 create table t(dt datetime);insert into t values(now());insert into t values(2007-9-3 12:10:10);insert into t values(2007/9/3 121010);insert into t values(2007#9#3 121010);insert into t values(20079…

.NET Community Toolkit 8.0.0 版本發布

.NET 社區工具包&#xff08;.NET Community Toolkit &#xff09;現已發布 8.0.0 版&#xff01;.NET 社區工具包是一組適用于所有 .NET 開發人員&#xff0c;且與任何特定 UI 平臺無關的幫助程序和 API。該工具包由 Microsoft 維護和發布&#xff0c;是 .NET 基金會的一部分&…

SpringData JPA、Hibernate、Mybatis三者的區別

目錄 1.ORM 考慮 SpringData JPA Hibernate MyBatis 2.業務查詢的區別 Spring Data JPA Hibernate Mybatis 3.可拓展性 Spring Data JPA Hibernate Mybatis 4.對緩存 Spring Data JPA Hibernate Mybatis 5.難度性 Spring Data JPA Hibernate Mybatis 總述…

1、內存

程序為什么需要內存 程序運行的目的&#xff1a;程序運行是為了得到一定的結果&#xff0c;程序運行其實是在做一系列的數據計算&#xff0c;所以&#xff1a;程序代碼數據&#xff1b;程序運行的目的不外乎2個&#xff1a;過程、結果&#xff1b; 用函數來類比&#xff1a;…

Map 遍歷取值及jstl的取值

Map 遍歷取值及jstl的取值 學習了&#xff1a;http://blog.csdn.net/yanjiaye520/article/details/17354239 1、Java map的便利取值 Java代碼 收藏代碼 Map<String,String> map new HashMap<String,String>(); map.put("key1", "value1");…

基于CAP組件實現補償事務與冪等性保障

【.NET Core】| 總結/Edison Zhou1補償事務和冪等性在微服務架構下&#xff0c;我們會采用異步通信來對各個微服務進行解耦&#xff0c;從而我們會用到消息中間件來傳遞各個消息。 補償事務某些情況下&#xff0c;消費者需要返回值以告訴發布者執行結果&#xff0c;以便于發布者…

Docker與k8s

前言 隨著k8s 作為容器編排解決方案變得越來越流行&#xff0c;有些人開始拿 Docker 和 k8s進行對比&#xff0c;不禁問道&#xff1a;Docker 不香嗎&#xff1f; k8s 是kubernets的縮寫&#xff0c;’8‘代表中間的八個字符。 其實 Docker 和 k8s 并非直接的競爭對手&#xff…

Linux下啟動tomcat報java.lang.OutOfMemoryError: PermGen space

2019獨角獸企業重金招聘Python工程師標準>>> 一、錯誤信息 java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.jav…

Redis安裝[Windows]

一. redis下載地址: https://github.com/ServiceStack/redis-windows/tree/master/downloads 根據需要的下載對應版本*.zip即可.(我這里是win7x64) 二.使用 1. 下載之后解壓到你相應的目錄下: 1 文件介紹&#xff1a; 2 redis-benchmark.exe #基準測試 3 redis-check-aof.e…

簡練軟考知識點整理-項目啟動過程組

啟動過程組包含定義一個新項目或現有項目的一個新階段&#xff0c;授權開始該項目或階段的一組過程。在啟動過程中&#xff0c;定義初步范圍和落實初步財務資源&#xff0c;識別那些將相互作用并影響項目總體結果的內外部干系人&#xff0c;選定項目經理&#xff08;如果尚未安…

在 ASP.NET Core 中上傳文件

簡介文件上傳是指將媒體文件&#xff08;本地文件或網絡文件&#xff09;從客戶端上傳至服務器存儲。ASP.NET Core 支持使用緩沖的模型綁定&#xff08;針對較小文件&#xff09;和無緩沖的流式傳輸&#xff08;針對較大文件&#xff09;上傳一個或多個文件。緩沖和流式傳輸是上…

Paxos算法詳解

Paxos、Raft分布式一致性算法應用場景一文講述了分布式一致性問題與分布式一致性算法的典型應用場景。作為分布式一致性代名詞的Paxos算法號稱是最難理解的算法。本文試圖用通俗易懂的語言講述Paxos算法。 一、Paxos算法背景 Paxos算法是Lamport宗師提出的一種基于消息傳遞的分…