求个好办法找到XML中指定名字的节点

gooore 2010-04-01 09:44:47
需要对xml文件中指定的节点进行处理,文件通常1到2M

用xml的解析器

求个好办法
...全文
101 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2010-04-01
  • 打赏
  • 举报
回复
可以的。
两个函数的参数都是用 XPath 进行查找的,具体看一下 MSDN 中的 XPath 说明。
gooore 2010-04-01
  • 打赏
  • 举报
回复
问题是selectNodes()也可以返回子节点的子节点吗? 如果名字相同。盼复

另外,当我创建子节点的时候总是用动态数组先保存好父节点,然后再append,感觉很麻烦,请教您是怎么处理的?


Private oXMLDom As MSXML2.DOMDocument
Private oXMLElement As MSXML2.IXMLDOMElement
Private oTemElement() As MSXML2.IXMLDOMElement
Private oNodeAttr As MSXML2.IXMLDOMAttribute

Private Sub Generate_Click()

Dim oThisNode As MSXML2.IXMLDOMNode
'<--Create a new DOMDoc and then set the root element
Set oXMLDom = CreateObject("MSXML2.DOMDocument")
oXMLDom.async = False
oXMLDom.validateOnParse = False
Set oXMLElement = oXMLDom.createElement("Root")
Set oXMLDom.documentElement = oXMLElement

'<--Create the child nodes and set the attributes(or values) if needed
ReDim oTemElement(0)
Set oTemElement(0) = oXMLDom.createElement("Node")
oXMLElement.appendChild oTemElement(0)
oTemElement(0).setAttribute "NodeAttr", "AttributeOfThisNode"

'<--Using dynamic object array to create nodes(attribute node)
ReDim Preserve oTemElement(UBound(oTemElement) + 1)
Set oTemElement(UBound(oTemElement)) = oXMLDom.createElement("ChildNode")
oTemElement(UBound(oTemElement) - 1).appendChild oTemElement(UBound(oTemElement))

Set oNodeAttr = oXMLDom.createAttribute("ChildNodeAttri")
oTemElement(UBound(oTemElement)).setAttributeNode oNodeAttr
oNodeAttr.Value = "ValueOfThisNodeAttr"

oTemElement(UBound(oTemElement)).Text = "Value Of this Element Node"

Save.Enabled = True

End Sub
Tiger_Zhao 2010-04-01
  • 打赏
  • 举报
回复
查找唯一一个节点用 selectSingleNode(),如果查找一批节点就用 selectNodes(),后者返回一个 IXMLDOMNodeList 列表。
king06 2010-04-01
  • 打赏
  • 举报
回复
是的,你可以用一个循环来操作。每个子节点不是有父节点吗。具体到哪个父节点下的某个。
For Each vNode In xmlRootElement.childNodes.Item(0).childNodes
或For i=0 to xmlRootElement.childNodes.Item(0).childNodes.length-1
具体的可以参考http://www.w3school.com.cn/xmldom/index.asp
gooore 2010-04-01
  • 打赏
  • 举报
回复
问楼上,

Set value_node = xmlRootElement.selectSingleNode("portType")是不是返回所有相同名字节点的集合?
king06 2010-04-01
  • 打赏
  • 举报
回复
DOMDocument和IXMLDOMElement对象。
e.g.
Dim value_node As IXMLDOMNode
Set value_node = xmlRootElement.selectSingleNode("portType")

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧