XML DOM 入门指南
2008-03-11 10:05
246 查看
状态 | 值 |
尚未初始化:加载尚未开始。 | 0 |
正在加载:正在执行加载方法。 | 1 |
已经加载:加载方法已经完成。 | 2 |
交互:对于只读检查有足够的 DOM 可用,数据仅被部分分析。 | 3 |
完成:数据已被加载和分析,并可用于读取/写入操作。 | 4 |
若要从 URL 打开文件,请使用完整格式的 URL 指定文件的位置。在文件位置前面必须加 http:// 前缀。
这里是从 URL 加载文件的例子:
xDoc.async = FalseIf xDoc.Load("http://www.develop.com/hp/brianr/cds.xml") Then ' 文档加载成功。 ' 现在做一些有趣的事情。Else ' 文档加载不成功。End If将文档的 Async 属性设置为
False,分析程序在文档被完全加载并可以对其进行操作之前,不将控制返回到您的代码。如果将其设置为
True,您必须在访问该文档之前先检查其 ReadyState 属性,或者利用 DOMDocument 的事件,在文档就绪时通知您的代码。
处理故障
由于各种各样的原因,文档加载很可能失败。其中最常见的原因可能是传送到加载方法的文档名无效。另一个原因可能是 XML 文档本身是无效的。在默认情况下,MSXML 分析程序将验证在您的文档中是否指定了 DTD 或架构。如果在调用加载方法之前设置了 DOMDocument 对象引用的 ValidateOnParse 属性,就令分析程序不验证文档。
Dim xDoc As MSXML.DOMDocument Set xDoc = New MSXML.DOMDocumentxDoc.validateOnParse = FalseIf xDoc.Load("C:/My Documents/cds.xml") Then ' 文档加载成功。 ' 现在做一些有趣的事情。Else ' 文档加载不成功。End If但要事先警告您:在***应用程序时关闭分析程序的验证特性并不是好方法。不正确的文档因各种理由导致程序的失败。至少,它会向用户提供无效的数据。
不管何种故障的类型,都可以通过访问 ParseError 对象,要求分析程序向您提供故障信息。若要利用 ParseError 对象的属性,请将引用设置为文档自身的 IXMLDOMParseError 界面。IXMLDOMParseError 界面显露了 7 种属性,可以用来研究错误的原因。
下面的例子显示一个消息框,以及 ParseError 对象给出的所有错误信息。
Dim xDoc As MSXML.DOMDocument Set xDoc = New MSXML.DOMDocumentIf 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 = "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, vbExclamationEnd IfSet xPE = Nothing可用 ParseError 对象显露的信息,将该信息显示给用户,将它记录到错误文件中,或者自己试着纠正错误。
在 XML 文档中检索信息
加载文档之后,下一步就是从文档中检索信息。虽然文档对象是重要的,但仍可发现,在大部分时间里都在使用 IXMLDOMNode 接口。利用 IXMLDOMNode 接口来读写单独的节点元素。在做任何事情之前,必须了解 MSXML 分析程序通常支持的 13 种节点类型。下表列出了几种最常遇见的节点类型。DOM 节点类型 | 实例 |
NODE_ELEMENT | <artist type="band">Offspring</artist> |
NODE_ATTRIBUTE | Offspring |
NODE_TEXT | Offspring |
NODE_PROCESSING_INSTRUCTION | <?xml version="1.0"?> |
NODE_DOCUMENT_TYPE | <!DOCTYPE compactdiscs SYSTEM "cds.dtd"> |
当有了文档的引用之后,就可以开始在节点的层次中来回移动了。从您的文档引用可以访问 ChildNodes 属性,它提供了从上到下的入口,可以到达文档中的所有节点。ChildNodes 属性显露了 IXMLDOMNodeList,它支持 Visual Basic For/Each 构造。因此,您可以枚举 ChildNodes 属性的所有单个节点。此外,ChildNodes 属性显露 Level 属性,它可以返回现有子节点的数量。
文档对象不仅显露了 ChildNodes 属性,还显露了所有单个节点。这样,与 IXMLDOMNode 的 HasChildNodes 属性联合起来,就使得在节点层次中来回移动来检查元素、属性和值,变得十分简单。
需要提醒的一件事情就是,文档元素和元素值之间的主从关系。例如,在 CD XML 文档中,元素
<标题>显露了一首歌的标题。要检索
<标题>元素的实际值,需要寻找 NODE_TEXT 类型的节点。当找到了具有感兴趣数据的节点之后,就可以检查属性,甚至通过 ParentNode 属性到达并访问其主节点。
如何在文档中来回移动?
在 XML 文档中,可以在一组被文档对象显露的节点中来回移动。因为 XML 文档本来就是分层的,所以编写在整个文档中来回移动的递归例程要相对容易些。LoadDocument 例程打开 XML 文档。然后 LoadDocument 调用另一个例程 DisplayNode,它在文档中真正地来回移动。LoadDocument 将引用当作参数和整数值传递到当前打开的 XML 文档的 ChildNodes 属性,指定从何处开始缩排级。代码使用缩排参数,在文档结构的 Visual Basic“快速窗口”中,将文本的显示格式化。
DisplayNode 函数在文档中来回移动,寻找特定于 NODE_TEXT 类型的节点。当代码找到了 NODE_TEXT 类型的节点之后,它用 NodeValue 属性来检索该节点的文本。此外,当前节点的 ParentNode 属性被用来获得 NODE_ELEMENT 类型节点的回溯引用。NODE_ELEMENT 类型的节点显露了 NodeName 属性。NodeName 和 NodeValue 的内容被显示。
如果通过检查 HasChildNodes 属性,确定该节点有子节点,则 DisplayNode 递归调用其自身,直到到达该文档的末尾。
DisplayNode 例程用 Debug.Print 将信息写入 Visual Basic 的“快速窗口”:
Public Sub LoadDocument()Dim xDoc As MSXML.DOMDocumentSet xDoc = New MSXML.DOMDocumentxDoc.validateOnParse = FalseIf xDoc.Load("C:/My Documents/sample.xml") Then ' 文档加载成功。 ' 现在做一些有趣的事情。 DisplayNode xDoc.childNodes, 0Else ' 文档加载不成功。 ' 查看前面列出的错误信息。End IfEnd SubPublic Sub DisplayNode(ByRef Nodes As MSXML.IXMLDOMNodeList, _ ByVal Indent As Integer) Dim xNode As MSXML.IXMLDOMNode Indent = Indent + 2 For Each xNode In Nodes If xNode.nodeType = NODE_TEXT Then Debug.Print Space$(Indent) & xNode.parentNode.nodeName & _ ":" & xNode.nodeValue End If If xNode.hasChildNodes Then DisplayNode xNode.childNodes, Indent End If Next xNodeEnd SubDisplayNode 用 HasChildNodes 属性来确定它是否应当再调用其自身。您还应当用节点的 Level 属性并检查大于 0 的值。
现在做什么?
本文只作为入门之用。现在您可以深入学习,增进对 XML 和 MSXML 分析程序的了解。可以做许多有趣的事情,如更新独立节点项的值、在文档中搜索、创建自己的文档,等等。如果需要更多的实例、文章和下载,请访问 MSDN Online XML Developer Center。相关文章推荐
- XML DOM 入门指南
- XML DOM 入门指南
- XML DOM 入门指南
- XML DOM 入门指南
- XML DOM 入门指南
- XML DOM 入门指南
- XML DOM 入门指南
- NetBeans IDE 5.0 快速入门指南
- 机器学习入门指南
- sbt入门指南翻译(2)sbt构造定义 --渣翻译有错误望指教
- Lua极简入门指南(一):基础知识篇
- Solr使用入门指南 (六)
- Intent入门指南
- 前端入门指南(菜鸟篇-下)
- Ext JS 4 入门指南--The Data Package(数据包)
- Nginx 30分钟入门指南
- JSON 入门指南(IBM)
- ElasticSearch的Java Api基本操作入门指南
- JBPM开发入门指南(3)
- 常用快捷键—Webstorm入门指南