2017-10-12 63 views
0

我的SQL查询返回一个实际上是XML的列结果。当我点击记录集时,它会打开一个results.xml使用VBScript将记录集转换为XML

这是输出XML我抓进result_string使用

result_string = objRecordSet.Fields(colname).Value 
<TEST_SUITE SUITE_ID="122675741" PART_NUMBER="MTSTE-26248-00" REVISION="A"  SUITE_TYPE="PRODUCTION" SUITE_NAME="HOT-LOW" SUITE_STOP_ON_FAIL="TRUE" TARGET_DURATION="0" SEQUENCE="1" UPDATED="2016-12-15T00:21:46.510"> 
    <SUITE_DESCRIPTION>"HOT-LOW"</SUITE_DESCRIPTION> 
    <TESTS> 
    <TEST TEST_ID="122663528" TEST_NAME="Set Suite Environment Variables" PART_NUMBER="MTTST-65899-00" REVISION="A" MODULE="TEST Set Environment Variables.vi" MODULE_LIBRARY="BIG-IP_TESTS" TEST_STOP_ON_FAIL="TRUE" TEST_TYPE="BEGIN_SESSION"> 
     <PARAMETERS> 
     <PARAMETER PARAMETER_ID="122663469" PARAMETER_NAME="TOS" PARAMETER_VALUE="build_2.0.1.1647.0_centos6_x86_64" /> 
     <PARAMETER PARAMETER_ID="82137" PARAMETER_NAME="chain" PARAMETER_VALUE="TRUE" /> 
     </PARAMETERS> 
     <MEASUREMENTS> 
     <MEASUREMENT MEASUREMENT_ID="70784" MEASUREMENT_NAME="TOS" UNITS="" UPPER_LIMIT="" LOWER_LIMIT="" COMPARISON="LOG" INPUT_SCALE_FACTOR="" OUTPUT_SCALE_FACTOR="" /> 
     <MEASUREMENT MEASUREMENT_ID="81537" MEASUREMENT_NAME="chain" UNITS="" UPPER_LIMIT="" LOWER_LIMIT="" COMPARISON="LOG" INPUT_SCALE_FACTOR="" OUTPUT_SCALE_FACTOR="" /> 
     </MEASUREMENTS> 
    </TEST> 
    </TESTS> 
</TEST_SUITE> 
从这个

我需要一个为test_id。我如何存储XML到这个result_string并获得Test_ID。或者有没有简单的方法来获得Test_ID?

我做了这样的事情,但不知道这是否正确,并且我在线路objCommand.Execute ,, adExecuteStream上收到错误。

Dim strm 
Set strm = CreateObject("ADODB.Stream") 

strm.Open 

Set objCommand.ActiveConnection = objConnection 
objCommand.CommandText = script_testID 
objCommand.Properties("Output Stream")= strm 
objCommand.Properties("Output Encoding") = "UTF-8" 
objCommand.Properties("XML Root") = "Root" 'this can be anything you want 

objCommand.CommandType = 4 
objCommand.Execute ,, adExecuteStream 
strm.Position = 0 
text = strm.ReadText 
Set xmlDoc = CreateObject("Microsoft.XMLDOM") 
xmlDoc.Async = "false" 

xmlDoc.LoadXML(strm.ReadText) 
strm.Close : Set strm = Nothing 
Set objCommand = Nothing 
+0

其实问题是关于XML解析,并且不与SQL和相关的记录,所以SQL标签是无关紧要的。 – omegastripes

+0

Try'test_id = Split(Split(result_string,“TEST_ID =”“”,2)(1),“”“”,2)(0)' – omegastripes

+0

哇,谢谢@omegastripes。非常感谢您的及时帮助。 – user2329418

回答

0

你已经解析XML数据,这样就可以方便地提取这样的值:

... 
xmlDoc.LoadXML(strm.ReadText) 

test_id = xmlDoc.SelectSingleNode("//TEST/@TEST_ID").Value 
... 

我会建议使用Msxml2.DOMDocument,而不是过时的Microsoft.XMLDOM,虽然和我还建议在处理数据之前检查解析错误:

... 
Set xmlDoc = CreateObject("Msxml2.DOMDocument.6.0") 
xmlDoc.Async = False 
xmlDoc.LoadXML strm.ReadText 

If xmlDoc.ParseError <> 0 Then 
    WScript.Echo xmlDoc.ParseError.Reason 
    WScript.Quit 1 
End If 

test_id = xmlDoc.SelectSingleNode("//TEST/@TEST_ID").Value 
... 

请注意, XPath expression//TEST/@TEST_ID)区分大小写。

+0

仍然在objCommand.Execute ,,执行错误,adExecuteStream 语法错误或访问冲突 – user2329418

+0

您是否定义了'adExecuteStream'? VBScript不知道这个常量。否则,尝试使用数值:'objCommand.Execute ,, 1024'。如果这没有帮助,请用确切的错误消息更新您的问题。 –

+0

@Angar Wiechers我尝试过1024,但是我得到了同样的错误。以及如何定义adExecuteStream 这是确切的错误: 语法错误或访问冲突 行(74):“objCommand.Execute ,, adExecuteStream”。 – user2329418

0

test_id = Split(Split(result_string, "TEST_ID=""", 2)(1), """", 2)(0)