我有一个Web服务,它返回类似于下面的XML字符串:
<?xml version="1.0"?>
<Result>
<PersonID>991166187</PersonID>
<AddressID>1303836</AddressID>
</Result>
我需要一个VBScript代码,以便我可以检索PersonID
和AddressID
的值。我的具体问题是如何从原始帖子中的XML字符串中检索PersonID
的值,即991166187
。
就我的尝试而言,我有以下代码:
Dim doc
Dim xmlString
Dim nodes
Dim idArray
xmlString = "<?xml version="1.0"?><Result><PersonID>991166187</PersonID><AddressID>1303836</Address‌​ID></Result>"
Set doc = CreateObject("MSXML2.DOMDocument")
doc.loadXML(xmlString)
'Set nodes = doc.selectNodes("Result/PersonID/AddressID")
nodes = doc.getElementsByTagName("PersonID")
For Each node In nodes
WScript.Echo "Person ID: " & node.text
答案 0 :(得分:3)
完成代码后,您需要编辑一些内容:
Replace
getElementsByTagName
行中应包含Set
,因为返回的值是对象。在我的机器上使用此代码并检索到所需的输出:
Dim doc
Dim xmlString
Dim nodes
xmlString = "<?xml version='1.0'?><Result><PersonID>991166187</PersonID><AddressID>1303836</AddressID></Result>"
Set doc = CreateObject("MSXML2.DOMDocument")
doc.loadXML(xmlString)
Set nodes = doc.getElementsByTagName("PersonID")
For Each node In nodes
MsgBox "Person ID: " & node.text
Next
MsgBox "done"
答案 1 :(得分:2)
请使用以下代码。
Dim oXML
Set oXML = CreateObject("Microsoft.XMLDOM")
'Load the XML file
oXML.Load("D:\Projects\QTP Project\TestAutomation\Extra\PersonID.xml")
'Loop through each nodes
For Each oChdNd In oXML.DocumentElement.ChildNodes
WScript.Echo oChdNd.nodeName&":"&oChdNd.text&vbCrLf
Next
答案 2 :(得分:1)
getElementsByTagName
的替代方案是selectNodes
,XPath表达。
Set doc = CreateObject("MSXML2.DOMDocument")
doc.loadXML xmlString
If doc.parseError <> 0 Then
WScript.Echo doc.parseError.reason
WScript.Quit 1
End If
Set nodes = doc.selectNodes("/Result/PersonID")
For Each node In nodes
WScript.Echo "Person ID: " & node.text
Next
如果您不知道(或不关心)/Result/PersonID
子节点的确切路径,请将//PersonID
更改为PersonID
。另外,请注意XPath表达式区分大小写。
答案 3 :(得分:-3)
我建议你使用vbs regexp。请检查此主题 How to match it correct way?