我对vb很新。在我的XML文件中,所有属性,节点和元素都是动态的(Healthcare.xml)。我试图以下面的方式获取值。
页面:登录,方法:登录,args:ad59090,GA124444
在某些情况下,会有多种方法和参数。
页面:好处,方法:tagbenefits,args:benefit1,benefit2(此福利页面有多个方法)
页面:好处,方法:clickonEOC,args:没什么
XML code:
<?xml version="1.0" encoding="UTF-8"?>
<pages>
<page id="login">
<method name="login">
<step>I want to login to CCB application</step>
<args id="username">
<value>ad59090</value>
</args>
<args id="password">
<value>GA124444</value>
</args>
</method>
</page>
<page id="benefits">
<method name="tagbenefits">
<step>I want to tag benefits on benefit page</step>
<args id="benefit1">
<value>General benefits</value>
</args>
<args id="benefit2">
<value>Cancer</value>
</args>
</method>
<method name="cleabenefits">
<step>I want to clear tag benefits on benefit page</step>
<args id="benefit1">
<value>General benefits</value>
</args>
<args id="benefit2">
<value>Cancer</value>
</args>
</method>
<method name="clickonEOC">
<step>I want to click on EOC page</step>
</method>
</page>
<page id="claims">
<method name="tagclaims">
<step>I want to tag claims on claims page</step>
<args id="claim1">
<value>201234567899</value>
</args>
<args id="claim2">
<value>201234567897</value>
</args>
</method>
<method name="clickonclaimpaymentlink">
<step>I want to navigate to claims payment page</step>
<args id="claim">
<value>201234567825</value>
</args>
</method>
<method name="validateclaimnumber">
<step>I want to DCN number on claim payment detail page</step>
<args>
<value>201234567897</value>
</args>
</method>
</page>
</pages>
我很震惊这样做。到目前为止,我已尝试使用3 for循环来获取值(Page - > Method - > args),但这不起作用。
第一个循环:获取页面节点数
第二个循环:尝试获取每个页面下的方法数量(但选择整个XML中的所有方法)
第三个循环:Gettig在特定方法Code is here下的参数数量
Vb代码:
Set Root = objXMLDoc.DocumentElement
Set NodeList = Root.getElementsByTagName("page")
Set List2 = xmlDoc.SelectNodes("//page")
Set List = xmlDoc.SelectNodes("//page/method") 'Here it is selecting all the methods in XML.
'It should select the methods under page1
For Each node2 In List2
Set Pageid = node2.Attributes.getNamedItem("id")
MsgBox (Pageid.Text)
For Each node In List
Set methodname = node.Attributes.getNamedItem("name")
MsgBox (methodname.Text)
For Each Elem In NodeList
Set idlist = Elem.getElementsByTagName("value")
For j = 0 To idlist.Length - 1
Set arg = Elem.getElementsByTagName("value")(j)
Msg = Msg + "," + arg.Text & vbNewLine
Next
MsgBox (Msg)
Exit For
Next
Next
你能否提出一个实现这个目标的方法?
我找到了解决方案!
首先,使用多个循环来获取页面和方法。
接下来,获取参数的最终循环。下面是代码。
Sub Type2()
Dim xmlDoc As New DOMDocument
Dim Root
Dim NodeList
Dim Msg
Dim arg
Dim myStringArray() As String
Dim methodname
Dim finalmsg As String
xmlDoc.async = False
Dim node As IXMLDOMNode
Dim node2 As IXMLDOMNode
Dim i As Integer
Dim k As Integer
Dim L As Integer
L = 2
k = 1
i = 0
Set objXMLDoc = CreateObject("Microsoft.XMLDOM")
objXMLDoc.async = False
xmlDoc.Load ("C:\Users\Sifv\Desktop\XML\DummyXML.xml")
objXMLDoc.Load ("C:\Users\Sifv\Desktop\XML\DummyXML.xml")
'Getting the number of page and method nodes
Set Root = objXMLDoc.DocumentElement
Set NodeList = Root.getElementsByTagName("page")
Set NodeList2 = Root.getElementsByTagName("method")
'Three for loops to get pages and methods
For k = 0 To NodeList.Length
Set List2 = xmlDoc.SelectNodes("//page[" & k & "]")
Set List = xmlDoc.SelectNodes("//page[" & k & "]/method")
For Each node2 In List2
Set Pageid = node2.Attributes.getNamedItem("id")
'MsgBox (Pageid.Text)
For Each node In List
Set methodname = node.Attributes.getNamedItem("name")
'MsgBox (methodname.Text)
Worksheets("Sheet1").Activate
Cells(L, 1).Value = Pageid.Text
Cells(L, 2).Value = methodname.Text
L = L + 1
Next
Next
Next
'Final for loop to get the list of arguments under each method
L = 2
For Each Elem In NodeList2
Set idlist = Elem.getElementsByTagName("value")
'MsgBox (NodeList2.Length)
'MsgBox (idlist.Length)
For j = 0 To idlist.Length - 1
Set arg = Elem.getElementsByTagName("value")(j)
Msg = Msg + "," + arg.Text
Next j
'MsgBox (Msg)
If idlist.Length = 0 Then
Worksheets("Sheet1").Activate
Cells(L, 3).Value = "No Arguments"
L = L + 1
Else
Worksheets("Sheet1").Activate
Cells(L, 3).Value = "'" + Right(Msg, Len(Msg) - 1)
L = L + 1
End If
'MsgBox (Msg)
Msg = vbStringNull
Next
End Sub
下面是输出。