使用DOMDocument Object编辑XML文件

在用DOMDocument object编辑XML文件时,我们应该注意XML文件中声明信息,他们会阻碍我们编辑XML文件中的数据。

首先介绍下XMl中常出现的DTD声明信息:

        实例如下:

        <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "
http://java.sun.com/dtd/web-app_2_3.dtd">

        分析:

        这段代码指定文件类型定义(DTD),可以通过它检查XML文档的有效性。下面显示的<!DOCTYPE>元素有几个特性,这些特性告诉我们关于DTD的信息:

 web-app定义该文档(部署描述符,不是DTD文件)的根元素

 PUBLIC意味着DTD文件可以被公开使用

"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"意味着DTDSun Microsystems, Inc.   

           维护。该信息也表示它描述的文档类型是DTD Web Application 2.3,而且DTD是用英文书写的。

 URL"http://java.sun.com/dtd/web-app_2_3.dtd"表示D文件的位置。

当包含了以上声明后,MSXML解析器将默认的针对DTD查验你的文档。

对包含以上code的XML文件,创建新的DOMDocument object,在不做任何设定的情况下,解析XML文件时候会发生错误。需要设定resolveExternals 属性为false来避免这个问题。

代码如下:

  set XMLDoc = CreateObject("Msxml2.DOMDocument")
  XMLDoc.resolveExternals = False
  XMLDoc.async = False
  XMLDoc.Load(xmlFile)

以下是本人从MSDN中翻译的部分解释:(原文连接:http://msdn.microsoft.com/en-us/library/ms759188(v=vs.85).aspx#Y1756)

在创建一个新的DOMDocument object时候,resolveExternals 属性的默认值为true。在解析的时候,它将解析外部的定义的文件并包含在XML 文件流中。比如,以下的外部文件和可解析定义会被解析并添加到你的解析后的文档中:

        1。包含可解析的模块化的DTD声明的文本文件,例如实体或者命名空间

        2。包含额外的规则或者模板的串型的XSD架构或者XSLT类型的表单文件

在使用中发现,有些时候“XMLDoc.resolveExternals = False”并不能完全解决解析XML文件错误的问题。在这个时候可以添加XMLDoc.validateOnParse = False定义,这样就能够完全解决XML文件解析的问题。validateOnParse 属性决定解析器是否查验文档。

如果我们需要检查解析为什么错误,我们可以调用ParseError object. 可以调用IXMLDOMParseError接口来显示ParseError object的属性。IXMLDOMParseError接口提供了7个属性用来调查错误发生的原因。

以下示例会提供一个消息窗口显示所有的错误信息

Dim xDoc As MSXML.DOMDocument
   Set xDoc = New MSXML.DOMDocument
If xDoc.Load("C:/My Documents/cds.xml") Then
   ' The document loaded successfully.
   ' Now do something intersting.
Else
   ' The document failed to load.
   Dim strErrText As String
   Dim xPE As MSXML.IXMLDOMParseError
   ' Obtain the ParseError object
   Set xPE = xDoc.parseError
   With xPE
      strErrText = "Your XML Document failed to load" & _
        "due the following error." & vbCrLf & _
        "Error #: " & .errorCode & ": " & xPE.reason & _
        "Line #: " & .Line & vbCrLf & _
        "Line Position: " & .linepos & vbCrLf & _
        "Position In File: " & .filepos & vbCrLf & _
        "Source Text: " & .srcText & vbCrLf & _
        "Document URL: " & .url
    End With

    MsgBox strErrText, vbExclamation
End If

Set xPE = Nothing

有错误的地方,望高人指出。谢谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值