首先需要引用Microsoft的DLL,打开references管理器
勾上Microsoft XML
接下来便可以使用MSXML DOM(如果不清楚MSXML的,科普http://blog.csdn.net/pony_maggie/article/details/6706422)
创建文档对象、节点、节点列表
Dim xmlDom As MSXML2.DOMDocument
Dim xmlNode As MSXML2.IXMLDOMNode
Dim xmlNodeList As MSXML2.IXMLDOMNodeList
加载xml文档(如果XML文档里标注了DTD或者schema文件,则在相同的目录下应该有相应的DTD/schema,否则Loda()无法读取)
xmlDom.Load(folder_location + "\wkf_batch_logging_template.xml")
Set xmlNode = xmlDom.SelectSingleNode("//POWERMART/REPOSITORY/FOLDER/WORKFLOW/SESSION")
其中"//POWERMART/REPOSITORY/FOLDER/WORKFLOW/SESSION"为XPATH表达式,提供寻找节点路径。
选择多个节点,selectNodes( [XPATH] ),常用伴随foreach遍历
Set xmlNodeList = xmlDom_temp.selectNodes("//POWERMART/REPOSITORY/FOLDER/WORKFLOW/SESSION/SESSIONEXTENSION")
Set xmlNode = Nothing
For Each xmlNode In xmlNodeList
' 遍历内容
Next
获取节点属性值
xmlNode.attributes.getNamedItem("TRANSFORMATIONTYPE").nodeValue
替换节点replaceChild(newNode, oldNode)
Set xmlNode = xmlDom_temp.SelectSingleNode("//POWERMART/REPOSITORY/FOLDER/WORKFLOW/SESSION")
Set xmlNode_root = xmlDom_temp.SelectSingleNode("//POWERMART/REPOSITORY/FOLDER/WORKFLOW")
Set xmlNode_wkf = xmlDom_wkf.SelectSingleNode("//POWERMART/REPOSITORY/FOLDER/WORKFLOW/SESSION")
Set xmlNode_root = xmlNode_root.replaceChild(xmlNode_wkf, xmlNode)
更多MSXML DOM的属性/方法参考如下:
XML DOM对象属性 | |
属性 | 描述 |
async | 设置或获取是否允许以异步方式载入XML文档 |
attributes | 获取节点的属性列表 |
childNodes | 获取节点的子节点列表 |
doctype | 获取与文档关联的文档类型声明,不包含声明则返回null |
documentElement | 获取在根节点中包含数据的对象,如果文件中不具有唯一根节点,返回null |
firstChild | 获取节点中的首个子节点,如果不具有子节点则返回null |
lastChild | 获取节点中的末个子节点,如果不具有子节点则返回null |
nextSibling | 获取节点所在的节点列表中下一个节点 |
nodeName | 获取节点的名称 |
nodeType | 获取节点的类型,(参见下表) |
nodeValue | 获取文本节点值 |
ondataavailable | 设置处理ondataavailable事件的函数 |
onreadystatechange | 获取处理onreadystatechange事件的函数 |
parentNode | 获取节点的父节点,如果不具有父节点则返回null |
parseError | 获取DOM解析错误对象,此对象描述最后解析错误的信息 |
previousSibling | 获取节点所在的节点列表中上一个节点 |
readyState | 获取XML文档的载入状态。状态值: |
url | 传回最近一次加载XML文档的URL。若文档不由外部载入则返回null |
validateOnParse | 告诉解析器文件是否有效 |
xml | 获取节点的XML描述和所有的子节点 |
Node节点类型说明 | |
Document | 文件阶层中的根节点(DOM树的根节点) |
Element | 一个元素 |
Attr | 一个属性,注意:属性与其它节点类型不同,它们不是同一父节点的子节点 |
ProcessingInstruction | 处理指令 |
Comment | 注释 |
Text | 处于一个元素或一个属性中的文本内容(字符数据) |
CDATASection | 一块包含字符的文本区 |
Entity | 实体 |
XML DOM对象方法 | |
abort() | 取消一个正在执行的异步下载 |
appendChild(newNode) | 在当前节点末端添加一个子节点newNode |
cloneNode(flag) | 复制当前节点,flag为true,复制整个节点,为false则只复制该节点及属性 |
createAttribute(attrName) | 创建属性attrName |
createCDATASection(data) | 创建包含指定数据的CDATA |
createComment(data) | 创建包含指定数据的注释 |
createDocumentFragment() | 创建空的文档片断 |
createElement(tagName) | 创建元素tagName |
createEntityReference(name) | 创建名称为name的实体参照 |
createNode(type,name[,nsURL]) | 创建新节点,type为节点类型,name为节点名称,nsURL为命名空间 |
createProcessingInstruction( | 创建处理指令,target为目标、名称或处理指令字符串,data为处理指令值 |
createTextNode(data) | 创建文本节点,data为内容 |
getElementsByTagName(tagName) | 获取标记为tagName的元素集合 |
hasChildNodes() | 检查节点是否含有子节点 |
insertBefore(newNode,theNode) | 在节点theNode前插入新节点newNode |
load(url) | 载入url指定的一个XML文档 |
loadXML(xmlString) | 载入xmlString指定的XML代码片段 |
nodeFromID(id) | 取得ID为id的节点 |
parsed() | 检查节点包括其子节点是否已被解析 |
removeChild(theNode) | 删除节点的子节点theNode |
replaceChild(newNode,oldNode) | 以节点newNode替换节点oldNode |
selectNodes(patternString) | 取得所有匹配模式patternString的节点 |
selectSingleNode(patternString) | 取得首个匹配模式patternString的节点 |
transformNode(styleSheet) | 以样式表styleSheet来处理节点及其子节点 |
XML DOM事件 | |
Ondataavailable | 在XML文档有效时被触发 |
Onreadystatechange | 在readyState属性值改变时被触发 |