2017-07-28 2 views
1

Ich habe eine Zeichenfolge mit XML-Inhalt, der im Grunde die Konfigurationen aufweist, die zum Ausführen des Testskripts erforderlich sind.Suchen und Ersetzen von Wörtern in XML-Zeichenfolge

$SUB_SEND, $COUNTRY_CODE, $DOMAIN werden alle aus einer Konfigurationsdatei gelesen.

<Provisioning xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><Request><Header><Command>Create</Command><EntityIdentifiers><Identifier Type="TelephoneNumber" Value="$SUB_SEND"/></EntityIdentifiers><EntityName>Subscriber</EntityName></Header><Data><Subscriber><!--<RcvMaxMmsMsgSize>53</RcvMaxMmsMsgSize>--><OperatorCode>54</OperatorCode><SendAutoReply>0</SendAutoReply><CopyReceivedMessagesEnabled>0</CopyReceivedMessagesEnabled><RequestMmsDeliveryReport>1</RequestMmsDeliveryReport><CopySentMessagesEnabled>0</CopySentMessagesEnabled><SendMmsToMbx>0</SendMmsToMbx><AddSignature>0</AddSignature><SubscriberCosName>Standard MMS</SubscriberCosName><!--<SendMmsMaxAttachNum>50</SendMmsMaxAttachNum>--><!--<SendMmsMaxRcptNum>51</SendMmsMaxRcptNum>--><!--<HandsetType>LegacyPhone</HandsetType>--><SubscriberDomainName>$DOMAIN</SubscriberDomainName><AutoProvIndication>1</AutoProvIndication><!--<SendMaxMmsMsgSize>52</SendMaxMmsMsgSize>--><MmsUserType>None</MmsUserType><BWListInUse>None</BWListInUse><AllowMmsDeliveryReport>1</AllowMmsDeliveryReport><!--<BillingType>PrePaid</BillingType>--><CountryCode>**$COUNTRY_CODE**</CountryCode><SubscriberName>$SUB_SEND</SubscriberName></Subscriber></Data></Request></Provisioning> 

Jetzt brauche ich eine jede Zeile lesen und das Auftreten von Wörtern mit $ und ersetzen Sie es mit Konfigurationsdatei beginnen zu finden. Wie kann ich alle Wörter beginnend mit $ in VBScript bekommen?

+0

Wenn Sie diese in einem String nur benutze 'myXmlString = Replace (myXmlString," $ SUB_SEND "," MyValueFromConfig ")' und wiederhole für '$ COUNTRY_CODE' und' $ DOMAIN' – Dave

+0

lass mich noch ein paar Punkte hinzufügen. Ich will es nicht hart codieren und ich möchte alle Wörter lesen, die mit $ beginnen, und es in einer Zeichenkette speichern und durch Konfigurationswerte ersetzen. Diese Lösung wird also allgemeiner und wenn jemand mehr Konfigurationselemente hinzufügt und keine weiteren Zeilen zum Ersetzen hinzufügen muss. – Sameer

+0

Was hast du bisher versucht? SO ist kein kostenloser Code-Schreibdienst. Woher kommen auch die Werte, die Sie ersetzen möchten? –

Antwort

1

Wenn Sie wirklich Ihre .xml als ASCII-Text behandeln, verwenden Sie einen regexp replace function und ein Wörterbuch für die Daten:

Option Explicit 

' path to src file 
Const p = "e:\work\proj\soa\tmp\45371693.xml" 

Dim s : s = CreateObject("Scripting.FileSystemObject").OpenTextFile(p).ReadAll() 

' Regexp to find $ + Seq of Alphas or _ 
Dim r : Set r = New RegExp 
r.Global = True 
r.Pattern = "\$[A-Z_]+" 

' Find/Replace pairs in a dictionary 
Dim d : Set d = CreateObject("Scripting.Dictionary") 
d("$SUB_SEND") = "Abra" 
d("$DOMAIN") = "cada" 
d("$COUNTRY_CODE") = "bra" 

' RegExp replace using function f 
s = r.Replace(s, GetRef("f")) 

WScript.Echo s 

WScript.Quit 0 

' replace found $X with d($X) 
Function f(m, p, s) 
    If d.Exists(m) Then m = d(m) 
    f = m 
End Function 

Ausgang:

cscript 45371693-2.vbs 
<Provisioning xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
     <Request> 
       <Header> 
         <Command>Create</Command> 
         <EntityIdentifiers> 
           <Identifier Type="TelephoneNumber" Value="Abra"/> 
         </EntityIdentifiers> 
         <EntityName>Subscriber</EntityName> 
       </Header> 
       <Data> 
         <Subscriber> 
           <!--<RcvMaxMmsMsgSize>53</RcvMaxMmsMsgSize>--> 
           <OperatorCode>54</OperatorCode> 
           <SendAutoReply>0</SendAutoReply> 
           <CopyReceivedMessagesEnabled>0</CopyReceivedMessagesEnabled> 
           <RequestMmsDeliveryReport>1</RequestMmsDeliveryReport> 
           <CopySentMessagesEnabled>0</CopySentMessagesEnabled> 
           <SendMmsToMbx>0</SendMmsToMbx> 
           <AddSignature>0</AddSignature> 
           <SubscriberCosName>Standard MMS</SubscriberCosName> 
           <!--<SendMmsMaxAttachNum>50</SendMmsMaxAttachNum>--> 
           <!--<SendMmsMaxRcptNum>51</SendMmsMaxRcptNum>--> 
           <!--<HandsetType>LegacyPhone</HandsetType>--> 
           <SubscriberDomainName>cada</SubscriberDomainName> 
           <AutoProvIndication>1</AutoProvIndication> 
           <!--<SendMaxMmsMsgSize>52</SendMaxMmsMsgSize>--> 
           <MmsUserType>None</MmsUserType> 
           <BWListInUse>None</BWListInUse> 
           <AllowMmsDeliveryReport>1</AllowMmsDeliveryReport> 
           <!--<BillingType>PrePaid</BillingType>--> 
           <CountryCode>**bra**</CountryCode> 
           <SubscriberName>Abra</SubscriberName> 
         </Subscriber> 
       </Data> 
     </Request> 
</Provisioning>