打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
利用Excel的VBA来处理XML
本文链接:https://blog.csdn.net/sinat_25419171/article/details/43405317
首先需要引用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")选择单个节点SelectSingleNode( [XPATH] )
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文档的载入状态。状态值:
0-UNINITIALIZED:XML DOM对象已声明,但未初始化
1-LOADING:文档载入中,但未开始解析
2-LOADED:部分文档已经加载且进行解析,但对象模型尚未生效
3-INTERACTIVE:对已加载的部分文档有效,此时对象模型是有效但只读的
4-COMPLETED:文件已完全加载,加载成功
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 )
创建处理指令,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属性值改变时被触发
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C#读取XML DOM方式读取
使用 MSXML 分析器处理 XML 文档
简介C#读取XML的两种方式
XML 文档对象模型 (DOM)
AJAX异步通信技术学习笔记
xml增删改查
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服