資源描述:
《從字符文檔到xml文檔--》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫。
1、從字符文檔到xml文檔>>計(jì)算機(jī)世界盡管現(xiàn)在越來越多地試圖使用unicode這一世界語來說話,但還是存在著gb2312,shift-jis這樣的方言,使用MSXMLDOM就會清楚地體會到方言的不便。我想將下面這個(gè)文本文檔直接存為轉(zhuǎn)換成xml,是否OK,答案是NG(NoGood)strXML="<?xmlversion=""1.0""encoding=""GB2312""?><XML>這里是一些編碼為GB2312的xml文檔</XML>"SetdomXML=NeentdomXML
2、.loadXMLstrXMLIfdomXML.parseErrorThenDebug.PrintdomXML.parseError.reasonElseDebug.PrintdomXML.xml執(zhí)行這段代碼會返回Scurrentencodingtospecifiedencodingnotsupported.(不支持從當(dāng)前編碼轉(zhuǎn)換到指定的編碼)這樣的錯(cuò)誤信息。為什么會這樣呢?ChrisLovett說:[LoadXML方法總是采用只在UCS-2或UTF-16中編碼的UnicodeBSTR。如果將非有效的Unicode
3、BSTR的內(nèi)容傳遞給LoadXML,則加載會失敗。]因此我們不得不只加載沒有用"方言"的文檔給DOMDocument對象。將<?xmlversion="1.0"encoding="GB2312"?>去掉,這樣的話strXML將作為unicode字符串交給dom處理。strXML="<XML>這里是一些編碼為GB2312的xml文檔</XML>"看到上面的用法,熱愛自己語言的人們也許會大罵ms的。如果對這一問題深入研究一下,其實(shí)我們完全能做到將帶有方言標(biāo)志的文檔直接加載到dom上
4、,我編了一個(gè)小函數(shù)解決之一問題。PrivateFunctionStr2XML(strOriAsString)AsDOMDocumentDimxmlDocAsDOMDocumentSetxmlDoc=NeentDimpi()AsBytepi()=StrConv(strOri,vbFromUnicode)xmlDoc.LoadpiSetStr2XML=xmlDocEndFunction我們用如下代碼試一下SetdomXML=NeentSetdomXML=Str2XML(strXML)IfdomXML.parseErr
5、orThenDebug.PrintdomXML.parseError.reasonElseDebug.PrintdomXML.xml就會發(fā)現(xiàn)正確輸出了帶<?xmlversion="1.0">標(biāo)志的xml文檔。但你如果用這個(gè)函數(shù)處理不帶"方言"標(biāo)志的文檔可能會出現(xiàn)下面的錯(cuò)誤AnInvalidcharacterl文檔的時(shí)候應(yīng)該先檢查一下語言標(biāo)志吧。如果說方言交給我的函數(shù)去做,說世界語的就讓他說吧。Str2XML函數(shù)的原理是什么呢?從下面ChrisLovett的描述里我想大家不難作出解釋。Load方法可將以
6、下內(nèi)容當(dāng)作VARIANT:1,(URL):如果VARIANT是BSTR,則將其理解為URL。2,(VT_ARRAY或VT_UI1):VARIANT也可以是包含原始編碼字節(jié)的SAFEARRAY。3,(IUnkno、IPersistStream和IPersistStreamInit調(diào)用QueryInterface。在msdn里沒有提及l(fā)oad的非url應(yīng)用,只是在ms的例子里能看到一些端倪,而且也是怪怪的。我的這篇文章也許可以稱為msxmlinside文章了吧。順便提一下用xmlhttp發(fā)到server上的數(shù)據(jù)在轉(zhuǎn)化
7、為xml文檔的時(shí)候就使用了load的這一用法。//LoadthepostedXMLdataandsaveittodisk.xml.load(Request);大家不覺的load(Request)的用法怪怪的嗎?其實(shí)我們分析一下用Request.BinaryRead讀到的內(nèi)容就會明白了。那就是文本文檔的SafeArray形式,一切沒有什么神秘的。建議大家讀〈XML數(shù)據(jù)的編碼方式〉的中文版本。>>>>這篇文章來自..,。