2017-10-12 5 views
0

Ma requête SQL renvoie un résultat de colonne unique qui est en fait un fichier XML. Lorsque je clique sur le jeu d'enregistrements, il ouvre un results.xml.Obtention du jeu d'enregistrements dans un fichier XML à l'aide de VBScript

C'est le XML de sortie, je suis en saisissant result_string en utilisant

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> 

de ce que je besoin d'un test_id. Comment puis-je stocker en XML ce result_string et obtenir le Test_ID. Ou y a-t-il un moyen facile d'obtenir le Test_ID?

J'ai fait quelque chose comme ceci, mais je ne sais pas si c'est correct, et aussi j'obtiens une erreur sur la ligne 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

En fait, la question est sur l'analyse XML et n'est pas lié avec SQL et recordsets, donc balise SQL est hors de propos. – omegastripes

+0

Essayez 'test_id = Split (Split (chaîne_résultats," TEST_ID = "" ", 2) (1)," "" ", 2) (0)' – omegastripes

+0

Wow, merci @omegastripes. Vraiment apprécier votre aide rapide. – user2329418

Répondre

0

Vous analyse déjà les données XML, de sorte que vous pouvez facilement extraire la valeur comme ceci:

... 
xmlDoc.LoadXML(strm.ReadText) 

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

Je recommanderais d'utiliser Msxml2.DOMDocument au lieu du Microsoft.XMLDOM dépréciée, bien que, et je recommande également de vérifier les erreurs d'analyse avant de travailler avec les données:

... 
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 
... 

Notez que le XPath expression (//TEST/@TEST_ID) est sensible à la casse.

+0

toujours l'erreur à objCommand.Execute ,, adExecuteStream Erreur de syntaxe ou violation d'accès – user2329418

+0

Avez-vous défini 'adExecuteStream'? VBScript ne connaît pas cette constante. Sinon, essayez avec la valeur numérique: 'objCommand.Execute ,, 1024'. Si cela ne vous aide pas, veuillez mettre à jour votre question avec le message d'erreur exact. –

+0

@Angar Wiechers J'ai essayé 1024 mais j'ai eu la même erreur. et aussi comment définir adExecuteStream Ceci est l'erreur exacte: Syntaxe violation d'erreur ou d'accès ligne (74): "objCommand.Execute ,, adExecuteStream". – user2329418

0

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