2017-10-12 2 views
0

私のSQLクエリは、実際にはXMLである単一の列結果を返します。レコードセットをクリックすると、results.xmlが開きます。VBScriptを使用したXMLへのレコードセットの取得

これは私が1 Test_IDを必要とし、このから

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> 

を使用してresult_stringにつかんでいた出力XMLです。このresult_stringをXMLに格納して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

'test_id = Split(Split(result_string、" TEST_ID = ""、2)(1)、 "" "、2)(012)を試してください。 – omegastripes

+0

うわー、ありがとうございます。本当にあなたの迅速な助けに感謝します。 – user2329418

答えて

0

あなたは既にXMLデータを解析しているので、あなたは簡単にこのような値が抽出できます。

... 
xmlDoc.LoadXML(strm.ReadText) 

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

は、私も、代わりに非推奨Microsoft.XMLDOMMsxml2.DOMDocumentを使用することをお勧めしますが、私データを操作する前に解析エラーをチェックすることをお勧めします。

... 
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を試しましたが、私は同じエラーが発生しました。 構文エラーまたはアクセス違反 ライン(74):「objCommand.Execute ,, adExecuteStream」ともこれが正確なエラーであるadExecuteStream を定義する方法について説明します。 – user2329418

0

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

関連する問題