锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鎵樼浠g爜閫氳繃 System.Xml 鍛藉悕絀洪棿騫挎硾鏀寔 XML錛岃屼緷璧栦簬 COM 鐨勪紶緇?Visual Basic廬 鍜?C++ 搴旂敤紼嬪簭鍙互璁塊棶 Microsoft廬 XML 鏍稿績鏈嶅姟 (MSXML) 涓殑綾諱技鍔熻兘銆備絾鏄紝榪欎簺騫舵病鏈変負闇瑕佸揩閫熺簿綆鐨?XML 鍒嗘瀽鍣ㄧ殑鏈満 C++ 寮鍙戜漢鍛樻彁渚涘瘜鏈夊惛寮曞姏鐨勯夐」銆傚紑濮嬩嬌鐢?XmlLite 鍚с?/p>
鏈枃灝嗘帰璁ㄦ偍鍙互瀵?XmlLite 鎵ц鐨勬搷浣溿備絾鏄紝棣栧厛錛屼負璁懼畾棰勬湡錛屾垜甯屾湜蹇熷洖欏句竴涓?XmlLite 鏈彁渚涚殑鍐呭錛岃嚦灝戞槸姝ゅ垵濮嬬増鏈腑鏈彁渚涚殑鍐呭銆傚浜庡垵瀛﹁咃紝瀹冩棦鏈彁渚涙枃妗e璞℃ā鍨?(DOM) 瀹炵幇錛屼篃鏈彁渚?XML 鏋舵瀯鎴栨枃妗g被鍨嬪畾涔?(DTD) 楠岃瘉銆傚畠榪樼己灝戝楂樼駭宸ュ叿鐨勬敮鎸侊紝渚嬪鍩轟簬鍏夋爣鐨勫鑸紙濡?XPath錛夈佹牱寮忚〃鍜屽簭鍒楀寲銆備絾鏄紝閫氳繃寤虹珛鍦?XmlLite 涔嬩笂鐨勫姛鑳斤紝鍙互鏍規嵁闇瑕佸~琛ヤ換浣曠┖鐧斤紝Microsoft .NET Framework 涓殑鍑犱箮鎵鏈?XML 鍔熻兘鍚屾牱閮藉緩绔嬪湪 XmlReader 鍜?XmlWriter 綾諱箣涓娿?/p>
閭d箞錛孹mlLite 鎻愪緵浜嗗摢浜涘唴瀹癸紵綆鍗曞湴璇達紝瀹冩彁渚涗簡闈炵紦瀛樼殑鍙繘鍒嗘瀽鍣紙鎻愪緵鎺ユ敹寮忕紪紼嬫ā鍨嬶級鍜岄潪緙撳瓨鐨勫彧榪?XML 鐢熸垚鍣ㄣ傚凡璇佹槑榪欎袱鑰呮槸闈炲父鏈変環鍊肩殑鍔熻兘銆?/p>
寮鍙戜漢鍛樻棩鐩婄啛鎮変粬浠瘡澶╀嬌鐢ㄧ殑搴擄紝閫氳繃騫挎硾浣跨敤 XML錛屼粬浠偗瀹氫細璇㈤棶鏈夊叧鏂版帹鍑虹殑 XML 鍒嗘瀽鍣ㄧ殑涓浜涚枒闅鵑棶棰樸傝浜嗚В榪欎竴鏂板垎鏋愬櫒鐨勪環鍊鹼紝璁╂垜浠鍏堣冭檻涓涓?XML 鍒嗘瀽鍣ㄥ綋浠婄殑鎯呭艦銆?/p>
寰堣嚜鐒跺湴錛屽鏋滃簲鐢ㄧ▼搴忓凡緇忓埄鐢?.NET Framework錛屽垯鍐沖畾閫氬父鏄緢綆鍗曠殑錛氬彧闇浣跨敤 System.Xml 鍗沖彲銆備負璇佹槑榪欎竴鐐癸紝XmlLite 鐨勮璁″熀浜?.NET Framework 涓?XmlReader 鍜?XmlWriter 綾葷殑璁捐銆備粠浠?C++ 緙栧啓鐨勬墭綆″簲鐢ㄧ▼搴忎嬌鐢?XmlLite 閫氬父娌℃湁浼樺娍銆俋mlLite 鐨勫姛鑳芥瘯绔熸瘮 XmlReader 鍜?XmlWriter 綾繪彁渚涚殑鍔熻兘瑕佸皯寰楀銆傦紙鍥韭? 涓殑琛ㄧ暐榪?XmlLite 涓殑涓昏綾誨瀷濡備綍鏄犲皠鍒?.NET Framework 涓殑涓昏綾誨瀷銆傦級鍙︿竴鏂歸潰錛屽鏋滃簲鐢ㄧ▼搴忎粎浣跨敤鏈満浠g爜錛岄偅涔堝氨 Microsoft 鎶鏈岃█錛孧SXML 鍦ㄤ紶緇熶笂鏄墍閫夌殑瑙e喅鏂規銆?/p>
MSXML 鎻愪緵浜嗕袱涓樊寮傚緢澶х殑 XML 鍒嗘瀽鍣ㄣ傜涓涓垎鏋愬櫒鏄湪鍚勭鎯呭艦涓嬪彲鐢ㄧ殑 DOM 瀹炵幇銆傚鏋滀嬌鐢ㄨ緝灝忕殑 XML 鏂囨。涓旈渶瑕侀殢鏈鴻闂?XML 鏂囨。榪涜鍐呭瓨涓鍙栧拰鍐欏叆錛屽垯 DOM 瀹炵幇鏄竴縐嶅悎鐞嗙殑閫夋嫨銆侻SXML 鐨勬洿楂樼増鏈紩鍏ヤ簡鈥滅敤浜?XML 鐨勭畝鍗?API (SAX2)鈥濈殑瀹炵幇銆傚畠瀹為檯涓婃槸鍚︾畝鍗曟槸鏈変簤璁殑銆備嬌鐢?SAX2 鏃訛紙鐢氳嚦鍦ㄥ紑濮嬩箣鍓嶏級錛屾偍闇瑕佸疄鐜拌嚦灝戜袱涓?COM 鎺ュ彛錛氫竴涓敤浜庢帴鏀?XML 鏂囨。涓悇涓妭鐐圭殑閫氱煡錛屽彟涓涓敤浜庢帴鏀跺垎鏋愰敊璇殑閫氱煡銆?/p>
灝?SAX2 瀹炵幇娣誨姞鍒?MSXML 鐨勫師鍥犲涓嬶細涓?DOM 瀹炵幇涓嶅悓錛孲AX2 鍒嗘瀽鍣ㄤ互鏁版嵁嫻佸艦寮忚鍙?XML 鏂囨。錛屽茍閫氱煡鎮ㄤ綍鏃跺埌杈懼悇涓妭鐐廣傝繖鎰忓懗鐫錛屾偍鐨勫簲鐢ㄧ▼搴忕殑鍐呭瓨浣跨敤閲忓茍涓嶉殢鎵鍒嗘瀽鏂囨。鐨勫ぇ灝忚屽鍔犮?/p>
SAX2 瀛樺湪鐨勯棶棰樹互鍙?.NET Framework 涓嶆彁渚涘叾瀹炵幇鐨勫師鍥犲湪浜?SAX2 妯″瀷鐨勫唴鍦ㄥ鏉傛с傚畠瑕佹眰瀹炵幇鎺ュ彛鎴栦簨浠訛紝騫跺己鍒跺紑鍙戜漢鍛樹嬌鐢ㄦ洿涓洪棿鎺ョ殑緙栫▼妯″瀷錛岃姹傚紑鍙戜漢鍛樼鐞嗘敞瀹氫細浣垮簲鐢ㄧ▼搴忓彉寰楀鏉傜殑鍏朵粬鐘舵併傜浉鍙嶏紝.NET Framework 涓殑 XmlReader 鍜?XmlWriter 綾諱互鍙?XmlLite 鐨?IXmlReader 鍜?IXmlWriter 鎺ュ彛鎻愪緵浜嗙畝鍗曟槗鎳傜殑鍒嗘瀽鍣紝鍙互鐩存帴鍦ㄥ嚱鏁頒腑浣跨敤錛岃屼笉蹇呯鐞嗕換浣曞閮ㄧ姸鎬佹垨閫氱煡銆?/p>
鐢變簬鍏惰璁$殑綆鏄庢э紝XmlLite 鑳藉鎻愪緵鐩稿綋濂界殑鎬ц兘錛屽嵆浣夸笌 MSXML SAX2 瀹炵幇鐩告瘮涔熸槸濡傛銆傝櫧鐒?SAX2 鍒嗘瀽鍣ㄥ彲浠ユ瘮 DOM 瀹炵幇鏇村ソ鍦板鐞嗗ぇ鍨嬫枃妗o紝浣嗘槸涓?XmlLite 鐩告瘮灝遍婅壊浜嗐?/p>
綆鍗曞湴璇達紝XmlLite 浼樹簬 MSXML錛屼笖瀹冩洿鏄撲簬浠庢湰鏈?C++ 浣跨敤銆侻SXML 浠嶅皢鏄?Visual Basic 鍜屽熀浜?COM 鐨勮剼鏈璦鐨勬渶鍙瑙e喅鏂規錛屼絾鏄幇鍦ㄦ湰鏈?Visual C++廬 鏈緇堝叿鏈変簡涓撻棬涓哄畠璁捐鐨?XML 鍒嗘瀽鍣ㄣ傝櫧鐒?Windows Vista鈩?鍜屾洿楂樼増鏈腑闄勫甫鏈?XmlLite錛屼絾鏄竴涓洿鏂板浜?Windows廬 XP 鍜?Windows Server廬 2003 鐨?32 浣嶅拰 64 浣嶇増鏈篃鏄彲鐢ㄧ殑銆傚洜涓烘湭娑夊強 COM 娉ㄥ唽錛屾墍浠ユ鏇存柊鍖呭簲璇ヤ笉浼氬鑷?MSXML 閫氬父閫犳垚鐨勬湁鍏沖畨瑁呭拰鐗堟湰鎺у埗鐨勯毦棰樸?/p>
XmlLite 涓嶄粎鏄槗璁扮殑鍚嶇О錛涗簨瀹炰笂錛屽畠鏄竴涓交鍨?XML 鍒嗘瀽鍣ㄣ俋mlLite 鍒╃敤浜?COM 鐨勭簿鍗庯紝鍗崇紪紼嬭鑼冨拰綰﹀畾錛屽茍鎶涘純浜嗗鏉傜殑鍜屽彲鑳戒笉蹇呰鐨勯儴鍒嗭紝濡?COM 娉ㄥ唽銆佽繍琛屾椂鏈嶅姟銆佷唬鐞嗐佺嚎紼嬫ā鍨嬨佸皝閫佸鐞嗙瓑銆?/p>
浠?XmlLite.dll 瀵煎嚭鐨勫嚱鏁板垱寤?XML 璇誨彇鍣ㄥ拰鍐欏叆鍣ㄣ傞氳繃閾炬帴鍒?XmlLite.lib 騫跺寘鎷?Windows SDK 涓殑 XmlLite.h 澶存枃浠訛紝鍙互璁塊棶瀹冧滑銆傜敓鎴愮殑 COM 鏍峰紡鎺ュ彛浣跨敤鐔熸倝鐨?IUnknown 鎺ュ彛鏂規硶榪涜鐢熷瓨鏈熺鐞嗐侰OM IStream 鎺ュ彛涔熻搗鍒頒竴瀹氫綔鐢ㄥ茍琛ㄧず瀛樺偍鍣ㄣ傞櫎姝や箣澶栵紝娌℃湁 COM 鐨勪緷璧栭」錛涙棤闇娉ㄥ唽浠諱綍 COM 綾繪垨鐢氳嚦璋冪敤寮哄埗鎬х殑 CoInitialize 鍑芥暟銆傛椿鍔ㄦā鏉垮簱 (ATL) CComPtr 綾誨鐞嗗墿浣欑殑涓灝忛儴鍒?COM銆備絾鏄紝鎮ㄧ‘瀹為渶瑕佸叧娉ㄧ嚎紼嬪畨鍏紝鍥犱負鍑轟簬鍗曠嚎紼嬫柟妗堜腑鐨勬ц兘錛孹mlLite 涓嶆槸綰跨▼瀹夊叏鐨勩?/p>
鎴戝湪浠ヤ笅紺轟緥涓嬌鐢?COM_VERIFY 瀹忥紝浠ヤ究娓呮櫚鍦拌瘑鍒柟娉曞湪浣曞榪斿洖闇瑕佹鏌ョ殑 HRESULT銆傚彲浠ュ皢姝ゆ浛鎹負鐩稿簲鐨勯敊璇鐞?- 涓嶇璇ユ搷浣滃紩鍙戝紓甯歌繕鏄偍鑷繁榪斿洖 HRESULT銆?/p>
XmlLite 鎻愪緵浜嗚繑鍥?IXmlReader 鎺ュ彛瀹炵幇鐨?CreateXmlReader 鍑芥暟錛?
铏界劧鏄彲閫夌殑錛屼絾鏄?CComPtr 綾繪ā鏉跨‘淇濊繀閫熼噴鏀炬帴鍙f寚閽堛?/p>
CreateXmlReader 鎺ュ彈鎺ュ彛鏍囪瘑絎?(IID) 浠ュ強鎸囧悜 void 鎸囬拡鐨勬寚閽堛傝繖鏄?COM 緙栫▼涓殑甯歌妯″紡錛屽厑璁歌皟鐢ㄦ柟鎸囧畾瑕佽繑鍥炵殑鎺ュ彛鎸囬拡鐨勭被鍨嬨傛垜鐨勭ず渚嬩嬌鐢?__uuidof 榪愮畻絎︼紝璇ヨ繍綆楃鏄?Microsoft 鐗瑰畾鐨勫叧閿瓧錛岀敤浜庢彁鍙栦笌綾誨瀷鍏寵仈鐨?GUID銆傚湪榪欑鎯呭喌涓嬶紝瀹冪敤浜庢绱㈡帴鍙g殑 IID銆侰reateXmlReader 鐨勬渶鍚庝竴涓弬鏁版帴鍙楀彲閫夌殑 IMalloc 瀹炵幇浠ュ厑璁歌皟鐢ㄦ柟鎺у埗鍐呭瓨鍒嗛厤銆?/p>
鍒涘緩璇誨彇鍣ㄥ悗錛岄渶瑕佹寚紺鴻鍙栧櫒灝嗙敤浣滆緭鍏ョ殑瀛樺偍鍣ㄣ侷Stream 鎺ュ彛琛ㄧず瀛樺偍鍣紝榪欐牱灝卞彲浠ュ皢 XmlLite 涓庡彲鑳借璁$殑浠諱綍嫻佸疄鐜頒竴璧蜂嬌鐢細
錛堟垜灝嗗湪鏈枃鐨勫悗闈㈤儴鍒嗕腑璁ㄨ嫻併傦級 璁劇疆 XML 璇誨彇鍣ㄧ殑杈撳叆鍚庯紝鍙互閫氳繃閲嶅璋冪敤 Read 鏂規硶榪涜璇誨彇銆俁ead 鏂規硶鎺ュ彈涓涓彲閫夊弬鏁幫紝璇ュ弬鏁板湪姣忔鎴愬姛璋冪敤鏃惰繑鍥炶妭鐐圭被鍨嬨俁ead 鏂規硶榪斿洖 S_OK 浠ユ寚紺哄凡浠庢祦涓垚鍔熻鍙栦笅涓涓妭鐐癸紝榪斿洖 S_FALSE 浠ユ寚紺哄凡鍒拌揪嫻佺殑緇撳熬澶勩備互涓嬫槸濡備綍渚濇鏋氫婦鑺傜偣鐨勪竴涓ず渚嬶細
瑕佹灇涓懼綋鍓嶈妭鐐圭殑灞炴э紝璇蜂嬌鐢?MoveToFirstAttribute 鍜?MoveToNextAttribute 鏂規硶銆傚鏋滃凡鎴愬姛鍦伴噸鏂板畾浣嶈鍙栧櫒錛屽垯榪欎袱縐嶆柟娉曢兘榪斿洖 S_OK錛涘鏋滀笉瀛樺湪鏇村鐨勫睘鎬э紝鍒欒繑鍥?S_FALSE銆備互涓嬬ず渚嬭鏄庡浣曚緷嬈℃灇涓劇粰瀹氳妭鐐圭殑灞炴э細
璋冪敤 IXmlReader 鐨?Read 鏂規硶鏃訛紝瀹冧細灝嗕換浣曡妭鐐瑰睘鎬ц嚜鍔ㄥ瓨鍌ㄥ湪鍐呴儴闆嗗悎涓傝繖鏍鳳紝鎮ㄥ氨鍙互浣跨敤 MoveToAttributeByName 鏂規硶錛屾寜鍚嶇О灝嗚鍙栧櫒縐誨姩鍒扮壒瀹氱殑灞炴с備絾鏄紝鏋氫婦灞炴у茍灝嗗叾瀛樺偍鍦ㄥ簲鐢ㄧ▼搴忕壒瀹氱殑鏁版嵁緇撴瀯涓紝鏁堢巼閫氬父鏇撮珮銆傝娉ㄦ剰錛屾偍榪樺彲浠ヤ嬌鐢?GetAttributeCount 鏂規硶紜畾褰撳墠鑺傜偣涓殑灞炴ф暟銆?/p>
紜畾鑺傜偣鎴栧睘鎬у悗錛岃幏鍙栧叾淇℃伅灝卞緢綆鍗曚簡銆備互涓嬬ず渚嬫紨紺哄浣曡幏鍙栫粰瀹氳妭鐐圭殑鍛藉悕絀洪棿 URI 鍜屾湰鍦板悕縐幫細
榪斿洖瀛楃涓插肩殑鎵鏈?IXmlReader 鏂規硶閮介伒寰妯″紡銆傜涓涓弬鏁版帴鍙楁寚鍚戝瀛楃鎸囬拡甯擱噺鐨勬寚閽堛傜浜屼釜鍙傛暟鏄彲閫夌殑錛涘鏋滃畠涓嶄負闆訛紝鍒欏畠灝嗚繑鍥炰互瀛楃搴﹂噺鐨勫瓧絎︿覆闀垮害錛堜笉鍖呮嫭絀虹粨鏉熺錛夈?/p>
浠ヤ笅鏄己璋冩ц兘鐨勫彟涓涓ず渚嬨備粎鍦ㄥ皢璇誨彇鍣ㄧЩ鍔ㄥ埌鍏朵粬鑺傜偣鎴栦互鏌愮鍏朵粬鏂瑰紡錛堝閫氳繃璁劇疆鏂扮殑杈撳叆嫻佹垨閲婃斁 IXmlReader 鎺ュ彛錛変嬌褰撳墠鑺傜偣鏃犳晥涔嬪墠錛屼粠 IXmlReader 鏂規硶榪斿洖鐨勫瓧絎︿覆鎸囬拡鎵嶆槸鏈夋晥鐨勩傛崲鍙ヨ瘽璇達紝IXmlReader 涓嶄細灝嗘祦鐨勫壇鏈繑鍥炵粰璋冪敤鏂廣?/p>
涓庡叾鍦?.NET Framework 涓殑瀵瑰簲鏂逛笉鍚岋紝IXmlReader 鏈彁渚涜鍙栭敭鍏ュ唴瀹圭殑浠諱綍鏂規硶銆備緥濡傦紝濡傛灉鐗瑰畾鐨勫厓绱犳垨灞炴у寘鍚暟瀛楁垨鏃ユ湡錛屽垯鎮ㄩ渶瑕侀鍏堣幏鍙栧叾瀛楃涓茶〃紺哄艦寮忥紝鐒跺悗鏍規嵁闇瑕佽嚜宸辮繘琛岃漿鎹€?NET Framework 鐨?XmlReader 綾諱腑瀛樺湪鐨勮澶氬叾浠?helper 鏂規硶涔熶笉瀛樺湪浜?IXmlReader 涓紝浣嗘槸鍙互浣滀負 helper 鍑芥暟緙栧啓銆俋mlLite 紜疄絎﹀悎鏈灝忔帴鍙h璁$殑 C++ 鐞嗚銆?/p>
鍥韭? 鏄劇ず浣跨敤 IXmlReader 璇誨彇 XML 鏂囨。鏃舵秹鍙婄殑瀵硅薄鍜屾娊璞°備絾鏄紝璇風墷璁幫紝IStream 鍙互鎶藉彇浠諱綍瀛樺偍錛屾澶勬樉紺虹殑鏂囦歡浠呬粎鏄竴涓父瑙佺ず渚嬨?/p>
XmlLite 鎻愪緵浜嗚繑鍥?IXmlWriter 鎺ュ彛瀹炵幇鐨?CreateXmlWriter 鍑芥暟錛?
鍒涘緩鍐欏叆鍣ㄥ悗錛岄渶瑕佹寚紺哄啓鍏ュ櫒灝嗙敤浣滆緭鍑虹殑瀛樺偍鍣細
寮濮嬪啓鍏ヤ箣鍓嶏紝鍙互淇敼鍐欏叆鍣ㄥ睘鎬с俋mlWriterProperty 鏋氫婦瀹氫箟鍙敤鐨勫睘鎬с備緥濡傦紝鎮ㄥ彲鑳藉笇鏈涙寚瀹氭槸鍚︾緝榪?XML 杈撳嚭浠ヤ究浜庤鑰呴槄璇伙紙浣跨敤 SetProperty 鏂規硶鍙互鍋氬埌榪欎竴鐐癸級錛?
鐒跺悗鍙互寮濮嬩嬌鐢?IXmlWriter 鏂規硶鍐欏叆鍩虹嫻併俋mlLite 鏀寔 XML 鐗囨銆傚鏋滆鍒掑啓鍏ュ畬鏁寸殑 XML 鏂囨。錛屽垯搴旇浠庤皟鐢?WriteStartDocument 鏂規硶錛堝畠璐熻矗鍐欏叆 XML 澹版槑錛夊紑濮嬨傚0鏄庡彇鍐充簬鎵鐢ㄧ殑緙栫爜錛屼絾鏄粯璁ょ紪鐮佷負 UTF-8錛屽畠鍦ㄥぇ澶氭暟鎯呭喌涓嬮兘搴旇鏄悎閫傜殑銆傦紙紼嶅悗灝嗕粙緇嶆枃鏈紪鐮併傦級鎻愪緵浜嗚澶?WriteXxx 鏂規硶錛岀敤浜庡啓鍏ュ悇縐嶈妭鐐圭被鍨嬨佸睘鎬у拰鍊箋?/p>
璇瘋冭檻浠ヤ笅紺轟緥錛?
WriteStartDocument 鏂規硶澶勭悊灝?XML 澹版槑鍐欏叆嫻佺殑鎿嶄綔銆傚畠鍙湁涓涓弬鏁幫紝璇ュ弬鏁版帴鍙楁潵鑷?XmlStandalone 鏋氫婦鐨勫鹼紝鎸囩ず鏄惁鍑虹幇鐙珛鐨勬枃妗e0鏄庯紝濡傛灉鏄繖鏍鳳紝鍒欐寚紺哄畠淇濆瓨鐨勫箋傚啓鍏?XML 鐗囨鏃訛紝閫氬父鐪佺暐瀵?WriteStartDocument 鐨勮皟鐢ㄣ?/p>
WriteStartElement 鏂規硶鎺ュ彈浠ヤ笅涓変釜鍙傛暟錛氱涓涓弬鏁版寚瀹氬厓绱犵殑鍙夊懡鍚嶇┖闂村墠緙錛岀浜屼釜鍙傛暟鎸囧畾鍏冪礌鐨勬湰鍦板悕縐幫紝絎笁涓弬鏁版寚瀹氬彲閫夌殑鍛藉悕絀洪棿 URI銆俉riteElementString 鏄?XmlLite 鎻愪緵鐨勯潪甯告柟渚跨殑鏂規硶涔嬩竴銆傜敤浜庡啓鍏?XHTML 鏂囨。鏍囬鐨勪互涓嬩唬鐮佺瓑鏁堜簬涓婁竴紺轟緥涓嬌鐢ㄧ殑 WriteElementString錛?
鏄劇劧錛學riteElementString 鏂規硶涓嶆槸緇濆蹇呰鐨勶紝浣嗗畠紜疄寰堟湁鐢ㄣ?/p>
鏈鍚庯紝WriteEndDocument 鏂規硶鐢ㄤ簬鍏抽棴鏂囨。銆傛偍鍙兘宸叉敞鎰忓埌錛屾湭鏄懼紡鍏抽棴 body 鍜?html 鍏冪礌銆俉riteEndDocument 浼氳嚜鍔ㄥ叧闂換浣曟墦寮鐨勫厓绱犮傚氨姝よ岃█錛岄噴鏀懼啓鍏ュ櫒涔熶細鍏抽棴浠諱綍鍓╀綑鐨勫厓绱犮備絾鏄紝濡傛灉鎮ㄤ笉灝忓績錛屽垯鏈樉寮忓叧闂綾誨厓绱犵殑鍋氭硶鍙兘浼氬鑷撮敊璇紝鍥犱負嫻佺殑鐢熷瓨鏈熷拰鍐欏叆鍣ㄧ殑鐢熷瓨鏈熼氬父鍙互涓嶅悓銆傝璇寸殑鏄紝濡傛灉闇瑕佺‘淇濆凡灝嗘墍鏈夎鍐欏叆鐨勫唴瀹瑰啓鍏ュ熀紜嫻侊紝鍒欏彧闇璋冪敤 IXmlWriter 鐨?Flush 鏂規硶鍗沖彲銆?/p>
鍥韭? 鏄劇ず浣跨敤 IXmlWriter 鍐欏叆 XML 鏂囨。鏃舵秹鍙婄殑瀵硅薄鍜屾娊璞℃祦銆傝鐗㈣錛孖Stream 鍙互鎶藉彇浠諱綍瀛樺偍錛屾澶勭殑鏂囦歡浠呬粎鏄竴涓父瑙佺ず渚嬨?/p>
鍒版涓烘錛屾垜瀵規祦榪涜鐨勪粙緇嶅茍涓嶅銆備笌涓浜涘姛鑳芥洿鍏ㄩ潰鐨?XML 搴撲笉鍚岋紝XmlLite 鏈彁渚涗換浣曟敮鎸佷粠鍏叡瀛樺偍浣嶇疆錛堝鏂囦歡鎴栭氳繃緗戠粶鍗忚錛夎鍙栧拰鍚戝叾鍐欏叆鐨勫姛鑳姐傛鍥犱負榪欎竴鐐癸紝瀵逛簬甯屾湜浠庡叾璇誨彇鎴栧悜鍏跺啓鍏ョ殑浠諱綍瀛樺偍鍣紝鎮ㄩ兘闇瑕佹彁渚?IStream 瀹炵幇銆傚疄鐜?IStream 鎺ュ彛騫朵笉澶嶆潅錛屼絾鏄湪璁稿鎯呭喌涓嬶紝鎮ㄤ笉闇瑕佹墽琛屾鎿嶄綔錛屽洜涓哄疄鐜板彲鑳藉凡瀛樺湪銆?/p>
CreateStreamOnHGlobal 鍑芥暟鎻愪緵鐢辮櫄鎷熷唴瀛樻敮鎸佺殑 IStream 瀹炵幇銆傜涓涓弬鏁版槸浣跨敤 GlobalAlloc 鍑芥暟鍒涘緩鐨勫彲閫夊唴瀛樺彞鏌勩備絾鏄紝鍙渶浼犻掗浂錛孋reateStreamOnHGlobal 鍗沖彲涓烘偍鍒涘緩鍐呭瓨瀵硅薄銆備互涓嬬ず渚嬪垱寤轟竴涓敱緋葷粺鍐呭瓨鏀寔涓斿皢鏍規嵁闇瑕佸姩鎬佸闀跨殑 IStream 瀹炵幇錛?
閲婃斁嫻佸皢閲婃斁鍐呭瓨銆?/p>
SHCreateStreamOnFile 鍑芥暟鎻愪緵浜嗗彟涓涓湁鐢ㄧ殑 IStream 瀹炵幇銆傚畠鍒涘緩鐢辨枃浠舵敮鎸佺殑 IStream錛?
铏界劧榛樿鎯呭喌涓?XmlLite 浣跨敤 UTF-8 榪涜鍐欏叆錛屼絾鏄鏋滃湪璇誨彇鏃跺皾璇曟嫻嬫枃鏈紪鐮侊紝鍒欏彲浠ヨ鐩栨琛屼負銆傞鍏堬紝璁╂垜浠湅涓涓嬫偍灝嗚嚜鍔ㄨ幏鍙栫殑淇℃伅銆傚浜庣粰瀹氱殑嫻侊紝IXmlReader 灝嗛氳繃浣滀負 XML 鍓嶅悓姝ョ爜鐨勫瓧鑺傞『搴忔爣璁版潵媯嫻嬬紪鐮佹彁紺恒侷XmlReader 榪樺皢鍏佽鍦?XML 澹版槑涓寚瀹氱殑浠諱綍緙栫爜銆傛湡鏈涗換浣?XML 鍒嗘瀽鍣ㄩ兘鍏鋒湁榪欎袱涓壒寰併傚鏋滃叿鏈夊彲鑳芥湭瀹氫箟浠諱綍緙栫爜淇℃伅鐨勮緭鍏ユ祦錛岃屼笖 XmlLite 鏃犳硶璇曟帰鎬у湴紜畾姝d嬌鐢ㄧ殑緙栫爜錛屽垯鍙互灝?IXmlReader 瀹氬悜鍒扮壒瀹氱殑緙栫爜錛堝鏋滅粰瀹氫簡浠g爜欏墊垨緙栫爜鍚嶇О錛夈?/p>
鍙互鍋囧?IXmlReaderInput 鎺ュ彛鍒涘緩 XML 璇誨彇鍣ㄨ緭鍏ュ璞★紝鑰屼笉鏄皢嫻佺洿鎺ヤ紶閫掑埌 IXmlReader銆傛彁渚涗簡涓や釜鐢ㄤ簬鍒涘緩鍖呰杈撳叆嫻佺殑杈撳叆瀵硅薄鐨勫嚱鏁般侰reateXmlReaderInputWithEncodingCodePage 鍑芥暟鎺ュ彈浠g爜欏電紪鍙峰艦寮忕殑浠g爜銆侰reateXmlReaderInputWithEncodingName 鍑芥暟鎺ュ彈浣跨敤鍏惰鑼冨悕縐扮殑緙栫爜銆傞櫎姝や箣澶栵紝榪欎袱涓嚱鏁板叿鏈夊畬鍏ㄧ浉鍚岀殑絳懼悕銆傛鎷竴涓嬶紝閫氬父鍙互瀵?XML 璇誨彇鍣ㄧ殑杈撳叆嫻佽繘琛屽涓嬭緗細
瑕佽鐩栫紪鐮侊紝璇峰皢浠g爜鏇存敼涓猴細
絎竴涓弬鏁版寚紺?XML 璇誨彇鍣ㄥ皢浠庡叾璇誨彇鐨勬祦銆傜浜屼釜鍙傛暟鎺ュ彈鍙夌殑 IMalloc 瀹炵幇銆傚鏋滄彁渚涚殑璇濓紝鍒欏畠灝嗚鐩?XML 璇誨彇鍣ㄨ嚜宸辯殑瀹炵幇銆傜涓変釜鍙傛暟鎸囧畾緙栫爜鍚嶇О銆?a >msdn2.microsoft.com/ms752827.aspx 涓婄殑鏂囨。鍒楀嚭浜嗘湰鏈烘敮鎸佺殑緙栫爜錛涜鏀寔鍏朵粬緙栫爜錛屽彲浠ユ彁渚?IMultiLanguage2 鎺ュ彛瀹炵幇銆備笅涓涓弬鏁版寚紺烘槸鍚﹀繀欏諱嬌鐢ㄦ寚瀹氱殑緙栫爜鎴栬呭畠鏄惁浠呬粎鏄竴涓彁紺恒傚鏋滄寚瀹?TRUE錛屽垯鎸囩ず鍒嗘瀽鍣ㄥ皾璇曚嬌鐢ㄥ緩璁殑緙栫爜錛屼絾鏄鏋滃畠澶辮觸錛屽垯鍙互闅忔剰灝濊瘯璇曟帰鎬у湴紜畾瀹為檯鐨勭紪鐮併傚鏋滄寚瀹?FALSE錛屽垯鎸囩ず鍒嗘瀽鍣ㄥ皾璇曞緩璁殑緙栫爜錛涘鏋滃畠涓庤緭鍏ユ祦涓嶅尮閰嶏紝鍒欒繑鍥為敊璇備笅涓涓弬鏁版帴鍙楀彲鑳界敤浜庤В鏋愬閮ㄥ疄浣撶殑鍙夊熀鏈?URI銆傛渶鍚庝竴涓弬鏁拌繑鍥炶〃紺鴻浼犻掑埌 SetInput 鏂規硶鐨勮緭鍏ュ璞$殑鎺ュ彛鎸囬拡銆?/p>
XML 鍐欏叆鍣ㄥ皢鍩轟簬浼犻掑埌 SetOutput 鏂規硶鐨勫璞$‘瀹氳浣跨敤鐨勭紪鐮併傚鏋滆瀵硅薄瀹炵幇 IStream 鎺ュ彛鎴栬呯敋鑷沖疄鐜版湁闄愮殑 ISequentialStream 鎺ュ彛錛屽垯 XML 鍐欏叆鍣ㄥ皢浣跨敤 UTF-8 緙栫爜銆傚彲浠ュ垱寤?XML 鍐欏叆鍣ㄨ緭鍑哄璞℃潵瑕嗙洊姝よ涓恒傛彁渚涗簡涓や釜鐢ㄤ簬鍒涘緩鍖呰杈撳嚭嫻佺殑杈撳嚭瀵硅薄鐨勫嚱鏁般侰reateXmlWriterOutputWithEncodingCodePage 鍑芥暟鎺ュ彈浠g爜欏電紪鍙峰艦寮忕殑緙栫爜錛岃?CreateXmlWriterOutputWithEncodingName 鍑芥暟鎺ュ彈浣跨敤鍏惰鑼冨悕縐扮殑緙栫爜銆傞櫎姝や箣澶栵紝榪欎袱涓嚱鏁板叿鏈夊畬鍏ㄧ浉鍚岀殑絳懼悕銆傞氬父錛屽彲浠ュ XML 鍐欏叆鍣ㄧ殑杈撳嚭嫻佽繘琛屽涓嬭緗細
瑕佽鐩栭粯璁ょ紪鐮侊紝璇風紪鍐欎互涓嬩唬鐮侊細
絎竴涓弬鏁版寚紺?XML 鍐欏叆鍣ㄥ皢鍐欏叆鐨勬祦銆傜浜屼釜鍙傛暟鎺ュ彈鍙夌殑 IMalloc 瀹炵幇銆傚鏋滄彁渚涚殑璇濓紝鍒欏畠灝嗚鐩?XML 鍐欏叆鍣ㄨ嚜宸辯殑瀹炵幇銆傜涓変釜鍙傛暟鎸囧畾緙栫爜鍚嶇О銆傛渶鍚庝竴涓弬鏁拌繑鍥炶〃紺鴻浼犻掑埌 SetOutput 鏂規硶鐨勮緭鍑哄璞$殑鎺ュ彛鎸囬拡銆?/p>
涓轟簡鍦ㄨ鍙栧ぇ鏁版嵁鍊兼椂闄愬埗鍐呭瓨浣跨敤錛孹ML 璇誨彇鍣ㄦ彁渚涗簡鎸夋暟鎹潡璇誨彇鍊肩殑鏈哄埗銆侷XmlReader ReadValueChunk 鏂規硶璇誨彇鐨勫瓧絎︽暟涓嶈秴榪囪瀹氱殑鏈澶у瓧絎︽暟錛屽湪棰勬枡鍒板悗緇皟鐢ㄦ椂鍚戝墠縐誨姩璇誨彇鍣ㄣ備互涓嬬ず渚嬭鏄庡浣曢噸澶嶈皟鐢?ReadValueChunk 浠ヨ鍙栧ぇ鏁版嵁鍊鹼細
褰撲笉鍐嶆湁鏁版嵁鍙敤鏃訛紝ReadValueChunk 榪斿洖 S_FALSE銆傚湪姝ょず渚嬩腑錛屾垜瑕佸皢鏁版嵁鍧楀啓鍏?CString 瀵硅薄銆傝繖浠呬粎鏄負浜嗚鏄庡浣曠鐞嗘暟鎹潡鐨勯暱搴︼紝鏄劇劧榪欏湪瀹為檯涓細鎶墊秷鏁版嵁鍒嗗潡鐨勪紭鍔褲?/p>
浠?XML 涓轟腑蹇冪殑搴旂敤紼嬪簭蹇呴』鎬繪槸澶勭悊鏉ヨ嚜涓嶅彲淇℃簮鐨?XML銆俋mlLite 鎻愪緵浜嗚澶氬伐鍏蜂互淇濇姢搴旂敤紼嬪簭鍏嶅彈宸茬煡婕忔礊鍜屽皢鏉ユ紡媧炵殑鏀誨嚮銆?/p>
XML 鏂囨。鍙互鍖呭惈瀵瑰閮ㄥ疄浣撶殑寮曠敤銆備竴浜?XML 鍒嗘瀽鍣ㄨ嚜鍔ㄨВ鏋愯繖浜涘疄浣撱傝櫧鐒舵鏂規硶鍙兘寰堟湁鐢紝浣嗘槸錛屽鏋滄湭浠旂粏緙栧啓 XML 瑙f瀽紼嬪簭浠ョ紦瑙e悇縐嶅▉鑳侊紝鍒欐鏂規硶鍙兘浼氶犳垚瀹夊叏婕忔礊鐨勬敾鍑匯俋mlLite 鏃笉鑷姩瑙f瀽澶栭儴瀹炰綋錛屼篃涓嶆彁渚?XML 瑙f瀽紼嬪簭銆傝鎻愪緵鑷繁鐨勫疄鐜幫紙濡傛湁蹇呰錛夛紝璇峰疄鐜?IXmlResolver 鎺ュ彛騫跺皢 XmlReaderProperty_XmlResolver 灞炴т笌 IXmlReader SetProperty 鏂規硶涓璧蜂嬌鐢紝浠ユ寚紺鴻鍙栧櫒浣跨敤鎮ㄧ殑瑙f瀽紼嬪簭銆?/p>
XML 鏂囨。鍙兘榪樺寘鍚?DTD 澶勭悊璇存槑銆傝櫧鐒?XmlLite 涓嶆敮鎸佹枃妗i獙璇侊紙浣跨敤 XML 鏋舵瀯鎴?DTD錛夛紝浣嗘槸瀹冩敮鎸?DTD 瀹炰綋鎵╁睍鍜岄粯璁ゅ睘鎬с傜敱浜庤繖浜?DTD 鍙互鍖呭惈瀵瑰閮ㄥ疄浣撶殑寮曠敤錛屽洜姝ゅ畠浠彲鑳戒細浣挎偍鐨勫簲鐢ㄧ▼搴忓彈鍒板悇縐嶆敾鍑匯傞粯璁ゆ儏鍐典笅錛孹mlLite 紱佺敤 DTD 澶勭悊銆傞氳繃灝?XmlReaderProperty_DtdProcessing 灞炴ц緗負 DtdProcessing_Parse 鍊鹼紝鍙互鍏佽 DTD 澶勭悊銆傛澶栵紝榪樺瓨鍦ㄧ敱 XmlReaderProperty_MaxEntityExpansion 鎺у埗鐨?DTD 瀹炰綋鎵╁睍鏀誨嚮錛堜篃縐頒負 billion laughs 鏀誨嚮錛夌殑鍐呯疆緙撹В鎺柦銆傛灞炴х殑榛樿鍊間負 100,000銆?/p>
鏀誨嚮鑰呭彲浠ュ埄鐢ㄤ嬌鐢?XML 鐨勫簲鐢ㄧ▼搴忕殑鍙︿竴縐嶆柟娉曟槸錛屽垱寤哄悕縐伴潪甯擱暱鐨勬枃妗c傚鏋滄湭鑳介樆姝紝鍒欒繖鍙兘鐢ㄥ敖宸ㄥぇ鐨勫唴瀛樺茍鍏佽鎷掔粷鏈嶅姟鏀誨嚮銆傛垜宸茬粡鎻愮ず浜嗗彲浠ユ墽琛岀殑鏂規硶銆傜紦瑙f綾誨▉鑳佺殑涓縐嶆槑鏄炬柟娉曟槸錛屾寜鏁版嵁鍧楄鍙栧ぇ鏁版嵁鍊鹼紝濡備笂涓閮ㄥ垎鎵榪般傚彟涓縐嶆湁鐢ㄧ殑鏂規硶鏄紝鎻愪緵闄愬埗鍐呭瓨鍒嗛厤鐨勮嚜瀹氫箟 IMalloc 瀹炵幇銆傚鏋滆緭鍏ユ祦鏀寔闅忔満璁塊棶錛屽垯榪樺彲浠ユ寚紺?XML 璇誨彇鍣ㄤ嬌鐢?XmlReaderProperty_RandomAccess 灞炴ф潵閬垮厤緙撳瓨灞炴с傝繖灝嗗噺灝戠敤浜庤鍙栧紑濮嬪厓绱犳爣璁扮殑鍐呭瓨閲忥紝浣嗘槸涔熷彲鑳介檷浣庡垎鏋愰熷害錛屽洜涓哄垎鏋愬櫒蹇呴』鏉ュ洖鏌ユ壘浠ヤ究鍦ㄨ姹傛椂媯绱㈠悇涓睘鎬у箋?/p>
濡傛灉 XML 灞傛緇撴瀯榪囨繁錛屽垯涔熷彲鑳藉揩閫熺敤灝界郴緇熻祫婧愩傝闃繪鏀誨嚮鑰呮彁渚涘眰嬈$粨鏋勮繃娣辯殑 XML 鏂囨。錛屽彲浠ヤ嬌鐢?XmlReaderProperty_MaxElementDepth 灞炴ч檺鍒跺垎鏋愬櫒灝嗗厑璁哥殑娣卞害銆傛灞炴ч粯璁や負 256銆?/p>
XmlLite 涓烘湰鏈?C++ 搴旂敤紼嬪簭鎻愪緵浜嗗姛鑳藉己澶х殑 XML 鍒嗘瀽鍣ㄣ傚畠鐫閲嶄簬鎬ц兘錛岀煡閬撳畠鎵浣跨敤鐨勭郴緇熻祫婧愶紝涓烘帶鍒惰繖浜涚壒寰佹彁渚涗簡寰堝ぇ鐨勭伒媧繪с俋mlLite 鏀寔鎵鏈夌殑甯歌鏂囨湰緙栫爜錛屾槸涓縐嶉潪甯告湁鐢ㄧ殑瀹炵敤宸ュ叿錛屽彲浠ョ畝鍖栨湰鏈?C++ 搴旂敤紼嬪簭涓殑 XML 浣跨敤銆傛湁鍏寵緇嗕俊鎭紝璇峰弬闃?msdn2.microsoft.com/ms752872.aspx 涓婄殑 XmlLite 鏂囨。銆?/p>
聽聽聽 灝界 .NET Framework 涓嶆柇鍙栧緱鎴愬姛錛孧icrosoft 浠嶇劧璁ょ湡瀵瑰緟鏈満 C++ 寮鍙戙傞氳繃寮曞叆 XmlLite錛堥傚悎浜庣敤鏈満 C++ 緙栧啓鐨勫簲鐢ㄧ▼搴忕殑楂樻ц兘銆佷綆寮閿 XML 璇誨彇鍣ㄥ拰鍐欏叆鍣級璇存槑浜嗚繖涓鐐廣?
涓轟粈涔堟帹鍑烘柊鐨?XML 鍒嗘瀽鍣紵
COM鈥淟ite鈥?/span>
璇誨彇 XML
CComPtr<IXmlReader> reader;
COM_VERIFY(::CreateXmlReader(__uuidof(IXmlReader),
reinterpret_cast<void**>(&reader),
0));
CComPtr<IStream> stream;
// Create stream object here...
COM_VERIFY(reader->SetInput(stream));
HRESULT result = S_OK;
XmlNodeType nodeType = XmlNodeType_None;
while (S_OK == (result = reader->Read(&nodeType)))
{
// Get node-specific info
}
for (HRESULT result = reader->MoveToFirstAttribute();
S_OK == result;
result = reader->MoveToNextAttribute())
{
// Get attribute-specific info
}
PCWSTR namespaceUri = 0;
UINT namespaceUriLength = 0;
COM_VERIFY(reader->GetNamespaceUri(&namespaceUri,
&namespaceUriLength));
PCWSTR localName = 0;
UINT localNameLength = 0;
COM_VERIFY(reader->GetLocalName(&localName,
&localNameLength));
鍥?2聽璇誨彇鍣?/span>
鍐欏叆 XML
CComPtr<IXmlWriter> writer;
COM_VERIFY(::CreateXmlWriter(__uuidof(IXmlWriter),
reinterpret_cast<void**>(&writer),
0));
CComPtr<IStream> stream;
// Create stream object here
COM_VERIFY(writer->SetOutput(stream));
COM_VERIFY(writer->SetProperty(XmlWriterProperty_Indent, TRUE));
COM_VERIFY(writer->WriteStartDocument(XmlStandalone_Omit));
COM_VERIFY(writer->WriteStartElement(0, L"html",
L"http://www.w3.org/1999/xhtml"));
COM_VERIFY(writer->WriteStartElement(0, L"head", 0));
COM_VERIFY(writer->WriteElementString(0, L"title", 0, L"My Web Page"));
COM_VERIFY(writer->WriteEndElement()); // </head>
COM_VERIFY(writer->WriteStartElement(0, L"body", 0));
COM_VERIFY(writer->WriteElementString(0, L"p", 0, L"Hello world!"));
COM_VERIFY(writer->WriteEndDocument());
COM_VERIFY(writer->WriteStartElement(0, L"title", 0));
COM_VERIFY(writer->WriteString(L"My Web Page"));
COM_VERIFY(writer->WriteEndElement());
鍥?3聽鍐欏叆鍣?/span>
浣跨敤嫻?/span>
CComPtr<IStream> stream;
COM_VERIFY(::CreateStreamOnHGlobal(0, TRUE, &stream));
CComPtr<IStream> stream;
COM_VERIFY(::SHCreateStreamOnFile(L"D:\\Sample.xml",
STGM_WRITE | STGM_SHARE_DENY_WRITE,
&stream));
璇誨彇鏃剁殑鏂囨湰緙栫爜
CComPtr<IStream> stream;
// Create stream object here
COM_VERIFY(reader->SetInput(stream));
CComPtr<IStream> stream;
// Create stream object here
CComPtr<IXmlReaderInput> input;
COM_VERIFY(::CreateXmlReaderInputWithEncodingName(stream,
0, // default allocator
L"ISO-8859-8",
TRUE, // hint
0, // base URI
&input));
COM_VERIFY(reader->SetInput(input));
鍐欏叆鏃剁殑鏂囨湰緙栫爜
CComPtr<IStream> stream;
// Create stream object here
COM_VERIFY(writer->SetOutput(stream));
CComPtr<IStream> stream;
// Create stream object here
CComPtr<IXmlWriterOutput> output;
COM_VERIFY(::CreateXmlWriterOutputWithEncodingName(stream,
0,
L"ISO-8859-8",
&output));
COM_VERIFY(writer->SetOutput(output));
澶勭悊澶ф暟鎹?/span>
CString value;
WCHAR chunk[256] = { 0 };
HRESULT result = S_OK;
UINT charsRead = 0;
while (S_OK == (result = reader->ReadValueChunk(chunk,
countof(chunk),
&charsRead)))
{
value.Append(chunk, charsRead);
}
瀹夊叏娉ㄦ剰浜嬮」
鎬葷粨
short 鑷沖皯 16浣?br />int 鑷沖皯鍜宻hort 涓鏍烽暱
long 鑷沖皯32浣嶏紝涓旇嚦灝戣鍜宨nt 涓鏍烽暱銆?br />
鏃犵鍙風増鏈?鍦?鍓嶉潰娣誨姞鍏抽敭瀛椔?unsigned
unsigned short聽聽聽聽聽聽聽聽聽聽 unsigned int聽聽 unsigned long聽聽聽聽聽聽聽聽聽聽聽聽 ,濡傛灉 鍙槸 unsigned聽 灝辨槸聽 unsigned int 鐨勭畝鍐欍?br />