欢迎来到天天文库
浏览记录
ID:24626682
大小:51.50 KB
页数:3页
时间:2018-11-15
《从字符文档到xml文档--》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、从字符文档到xml文档>>计算机世界尽管现在越来越多地试图使用unicode这一世界语来说话,但还是存在着gb2312,shift-jis这样的方言,使用MSXMLDOM就会清楚地体会到方言的不便。我想将下面这个文本文档直接存为转换成xml,是否OK,答案是NG(NoGood)strXML="<?xmlversion=""1.0""encoding=""GB2312""?><XML>这里是一些编码为GB2312的xml文档</XML>"SetdomXML=NeentdomXML
2、.loadXMLstrXMLIfdomXML.parseErrorThenDebug.PrintdomXML.parseError.reasonElseDebug.PrintdomXML.xml执行这段代码会返回Scurrentencodingtospecifiedencodingnotsupported.(不支持从当前编码转换到指定的编码)这样的错误信息。为什么会这样呢?ChrisLovett说:[LoadXML方法总是采用只在UCS-2或UTF-16中编码的UnicodeBSTR。如果将非有效的Unicode
3、BSTR的内容传递给LoadXML,则加载会失败。]因此我们不得不只加载没有用"方言"的文档给DOMDocument对象。将<?xmlversion="1.0"encoding="GB2312"?>去掉,这样的话strXML将作为unicode字符串交给dom处理。strXML="<XML>这里是一些编码为GB2312的xml文档</XML>"看到上面的用法,热爱自己语言的人们也许会大骂ms的。如果对这一问题深入研究一下,其实我们完全能做到将带有方言标志的文档直接加载到dom上
4、,我编了一个小函数解决之一问题。PrivateFunctionStr2XML(strOriAsString)AsDOMDocumentDimxmlDocAsDOMDocumentSetxmlDoc=NeentDimpi()AsBytepi()=StrConv(strOri,vbFromUnicode)xmlDoc.LoadpiSetStr2XML=xmlDocEndFunction我们用如下代码试一下SetdomXML=NeentSetdomXML=Str2XML(strXML)IfdomXML.parseErr
5、orThenDebug.PrintdomXML.parseError.reasonElseDebug.PrintdomXML.xml就会发现正确输出了带<?xmlversion="1.0">标志的xml文档。但你如果用这个函数处理不带"方言"标志的文档可能会出现下面的错误AnInvalidcharacterl文档的时候应该先检查一下语言标志吧。如果说方言交给我的函数去做,说世界语的就让他说吧。Str2XML函数的原理是什么呢?从下面ChrisLovett的描述里我想大家不难作出解释。Load方法可将以
6、下内容当作VARIANT:1,(URL):如果VARIANT是BSTR,则将其理解为URL。2,(VT_ARRAY或VT_UI1):VARIANT也可以是包含原始编码字节的SAFEARRAY。3,(IUnkno、IPersistStream和IPersistStreamInit调用QueryInterface。在msdn里没有提及load的非url应用,只是在ms的例子里能看到一些端倪,而且也是怪怪的。我的这篇文章也许可以称为msxmlinside文章了吧。顺便提一下用xmlhttp发到server上的数据在转化
7、为xml文档的时候就使用了load的这一用法。//LoadthepostedXMLdataandsaveittodisk.xml.load(Request);大家不觉的load(Request)的用法怪怪的吗?其实我们分析一下用Request.BinaryRead读到的内容就会明白了。那就是文本文档的SafeArray形式,一切没有什么神秘的。建议大家读〈XML数据的编码方式〉的中文版本。>>>>这篇文章来自..,。
此文档下载收益归作者所有