从字符文档到xml文档

2016-02-19 18:35 1 1 收藏

在这个颜值当道,屌丝闪边的时代,拼不过颜值拼内涵,只有知识丰富才能提升一个人的内在气质和修养,所谓人丑就要多学习,今天图老师给大家分享从字符文档到xml文档,希望可以对大家能有小小的帮助。

【 tulaoshi.com - Web开发 】

    计算机世界尽管现在越来越多地试图使用unicode这一世界语来说话,但还是存在着gb2312,shift-jis这样的方言,使用MSXML DOM就会清楚地体会到方言的不便。

    我想将下面这个文本文档直接存为转换成xml,是否OK,答案是NG(No Good)

strXML="?xml version=""1.0"" encoding=""GB2312""?XML这里是一些编码为GB2312的xml文档/XML"
Set domXML = New DOMDocument
domXML.loadXML strXML
If domXML.parseError Then Debug.Print domXML.parseError.reason Else Debug.Print domXML.xml

    执行这段代码会返回Switch from current encoding to specified encoding not supported.(不支持从当前编码转换到指定的编码)这样的错误信息。为什么会这样呢?Chris Lovett说:[LoadXML 方法总是采用只在 UCS-2 或 UTF-16 中编码的 Unicode BSTR。如果将非有效的 Unicode BSTR 的内容传递给 LoadXML,则加载会失败。]

    因此我们不得不只加载没有用"方言"的文档给DOMDocument对象。将?xml version="1.0" encoding="GB2312"?去掉,这样的话strXML将作为unicode字符串交给dom处理。

strXML="XML这里是一些编码为GB2312的xml文档/XML"

   看到上面的用法,热爱自己语言的人们也许会大骂ms的。

   如果对这一问题深入研究一下,其实我们完全能做到将带有方言标志的文档直接加载到dom上,我编了一个小函数解决之一问题。

Private Function Str2XML(strOri As String) As DOMDocument
Dim xmlDoc As DOMDocument
Set xmlDoc = New DOMDocument
Dim pi() As Byte
pi() = StrConv(strOri, vbFromUnicode)
xmlDoc.Load pi
Set Str2XML = xmlDoc
End Function

我们用如下代码试一下

Set domXML = New DOMDocument
Set domXML = Str2XML(strXML)
If domXML.parseError Then Debug.Print domXML.parseError.reason Else Debug.Print domXML.xml

   就会发现正确输出了带?xml version="1.0"标志的xml文档。但你如果用这个函数处理不带"方言"标志的文档可能会出现下面的错误

An Invalid character was found in text content.(在文本内容里存在非法字符)对于这个问题我也是在写这篇文章的时候才发现,我想在将一个text文档转换为xml文档的时候应该先检查一下语言标志吧。如果说方言交给我的函数去做,说世界语的就让他说吧。

Str2XML函数的原理是什么呢?

从下面Chris Lovett的描述里我想大家不难作出解释。

Load 方法可将以下内容当作 VARIANT:

1,(URL):如果 VARIANT 是 BSTR,则将其理解为 URL。

2,(VT_ARRAY 或 VT_UI1): VARIANT 也可以是包含原始编码字节的 SAFEARRAY。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)

3,(IUnknown): 如果 VARIANT 是 IUnknown 接口,则 DOM 文档为 IStream、IPersistStream 和 IPersistStreamInit 调用 QueryInterface。

   在msdn里没有提及load的非url应用,只是在ms的例子里能看到一些端倪,而且也是怪怪的。我的这篇文章也许可以称为msxml inside文章了吧。

   顺便提一下用xmlhttp发到server上的数据在转化为xml文档的时候就使用了load的这一用法。

// Load the posted XML data and save it to disk.
xmldoc.load(Request);

   大家不觉的load(Request)的用法怪怪的吗?

   其实我们分析一下用Request.BinaryRead读到的内容就会明白了。那就是文本文档的SafeArray形式,一切没有什么神秘的。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/webkaifa/)

   建议大家读〈XML 数据的编码方式〉的中文版本。

来源:https://www.tulaoshi.com/n/20160219/1618264.html

延伸阅读
标签: 办公软件
在Word中有一种特殊的制表位,它能够按照文字中出现的第一个句点对齐排列文字,这就是所谓的小数点制表位,非常适合于将数值型文字按照小数点位置对齐排列。 但是,如果要按照文字中出现的其他字符排列,又该怎么办呢? 例如,如果我们要让文字按照最先出现的@符号、星号(*)或连字符(-)排列,应该如何操作?遗憾的是,Word没有提供类似于“小...
标签: Web开发
  文简要描述了DOM的概念和内部逻辑结构,实例讲述DOM文档操作和XML文件互相转换的java实现过程。   1. DOM简介   目前,W3C已于2000年11月13日推出了规范DOM level 2。文档对象模型(DOM)是HTML和XML文档的编程接口规范,它与平台和语言是无关的,因而可以用各种语言在各种平台上实现。该模型定义了THML和XML文件在内存...
标签: PHP
用sax方式的时候,要自己构建3个函数,而且要直接用这三的函数来返回数据, 要求较强的逻辑。 在处理不同结构的xml的时候, 还要重新进行构造这三个函数,麻烦! 用dom方式,倒是好些,但是他把每个节点都看作是一个node,操作起来要写好多的代码, 麻烦! 网上有好多的开源的xml解析的类库, 以前看过几个,但是心里总是...
标签: 电脑入门
如果是从word 2003升级到Word 2007,那么可能会注意到关于XML的某些改变。一方面,你将不能从XML文档模板开始新建XML文档。因为Word 2007中不包含XML文档模板。 取而代之的是,任何文档都变成XML文档。只需简单地选择office按钮-另存为,并将保存类型设置为word XML文档。注意Word 2003 XML文档选项。它具有Word XML文档选项所没有的附加选项...
标签: Web开发
当今世界,技术发展迅猛,不论是什么行业,大多数关键数据都是放置于数据库中进行管理的,一来目前数据库技术已经相当成熟,二来其管理功能非常强大。以往的数据库应用,其数据底层结构一般来说都是相对固定,也就是说,开发出来的应用程序是针对具体的数据结构,其应用范畴受到一定限制,开放性较差。 XML作为一种可扩展性标记语言,...

经验教程

423

收藏

13
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部