msxml解析器实现了一些有用的方法,你在调入一个大的文档时可以用这些方法追踪调入过程的状态。这些方法对从internet上异步的调入文档也很有帮助。
要打开一个internet上的文档,你需要提供绝对url,并且必须加http://前缀。下面是一个例子。
xdoc.async = false
if xdoc.load("http://www.develop.com/hp/brianr/cds.xml") then
' 文档调入成功
' 作我们喜欢作的事
else
' 文档调入失败
end if
将async属性设置为false,这样在文档调入完成之前,解析器不会将控制权交给你的代码。如果把async保存为true,你在访问文档时必须检查readystate属性或者利用domdocument的事件在文档可以访问时提示你的代码。
你的文档可能因为各种原因而调入失败,最常见的原因是提供给解析器的文档名不正确,另一个常见的原因是xml文档不合法。
默认的解析器会验证你的文档是否符合某个dtd 或者 schema,你可以不让解析器执行验证,在执行load方法之前,将domdocument的属性validateonparse为false。
dim xdoc as msxml.domdocument
set xdoc = new msxml.domdocument
xdoc.validateonparse = false
if xdoc.load("c:\my documents\cds.xml") then
' 文档调入成功
' 作我们喜欢作的事
else
' 文档调入失败
end if
事先关闭验证功能不是个好主意,它会带来许多问题,至少它会是你提供错误格式的数据给你的用户。
你可以通过访问parseerror对象来从解析器那儿获得有关错误类型的信息。创建一个ixmldomparseerror界面的引用,然后把它指向文档自身的parseerror对象。ixmldomparseerror界面实现了七种属性来使你获得错误原因。
下面的例子显示了一个信息框,列出了parseerror对象中所有错误信息。
dim xdoc as msxml.domdocument
set xdoc = new msxml.domdocument
if xdoc.load("c:\my documents\cds.xml") then
' 文档调入成功
' 作我们喜欢作的事
else
' 文档调入失败
dim strerrtext as string
dim xpe as msxml.ixmldomparseerror
' 获得parseerror对象
set xpe = xdoc.parseerror
with xpe
strerrtext = "你的xml document 不能调入" & _
"原因是." & vbcrlf & _
"错误 #: " & .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
你可以利用parseerror对象来向你的用户报告错误信息,或者把它写入你个log中,你还可以尝试自己解决遇到的问题。
一旦你成功的调入了文档,下一步就是如何从中获得信息了。当你操作文档时,你经常会用到ixmldomnode界面,你利用它来读/写各个分离的节点元素。在使用它之前,你必须先理解msxml支持的13种节点元素类型,下面是最常用的几个。
|
dom节点类型 |
举例 |
|
node_element |
<artist type="band">the offspring</artist> |
|
node_attribute |
type="band">the offspring |
|
node_text |
the offspring |
|
node_processing_instruction |
<?xml version="1.0"?> |
|
node_document_type |
<!doctype compactdiscs system "cds.dtd"> |