在VBScript中解析XML字符串

时间:2015-10-17 13:40:05

标签: xml string vbscript

我有一个Web服务,它返回类似于下面的XML字符串:

<?xml version="1.0"?>
<Result>
    <PersonID>991166187</PersonID>
    <AddressID>1303836</AddressID>
</Result>

我需要一个VBScript代码,以便我可以检索PersonIDAddressID的值。我的具体问题是如何从原始帖子中的XML字符串中检索PersonID 的值,即991166187

就我的尝试而言,我有以下代码:

Dim doc
Dim xmlString
Dim nodes
Dim idArray

xmlString = "<?xml version="1.0"?><Result><PersonID>991166187</PersonID><AddressID>1303836</Address&#8204;&#8203;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

4 个答案:

答案 0 :(得分:3)

完成代码后,您需要编辑一些内容:

  1. 您获得的XML字符串中包含双引号。您不能直接使用这些双引号并将其保存为字符串。你有两个选择:
    1. 从字符串创建XML文件并解析
    2. 使用Replace
    3. 将双引号替换为单引号
  2. getElementsByTagName行中应包含Set,因为返回的值是对象。
  3. 在我的机器上使用此代码并检索到所需的输出:

    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的替代方案是selectNodesXPath表达。

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?