Vbscript 查找并替换XML字符串中的单词
我有一个包含XML内容的字符串,它基本上具有执行测试脚本所需的配置Vbscript 查找并替换XML字符串中的单词,vbscript,hp-uft,Vbscript,Hp Uft,我有一个包含XML内容的字符串,它基本上具有执行测试脚本所需的配置 $SUB\u SEND,$COUNTRY\u code,$DOMAIN都是从配置文件中读取的 <Provisioning xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><Request><Header><Command>Create</Command><EntityIdentifiers><
$SUB\u SEND
,$COUNTRY\u code
,$DOMAIN
都是从配置文件中读取的
<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>
createSubscriber54001000标准彩信$domain1none1**$COUNTRY\u code**$SUB\u发送
现在我需要读取每一行,找到以$
开头的单词,并将其替换为配置文件。
如何在VBScript中获取以
$
开头的所有单词?如果您确实可以将.xml视为纯ASCII文本,请使用和字典获取数据:
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
输出:
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>
cscript 45371693-2.vbs
创造
用户
54
0
0
1.
0
0
0
标准彩信
卡达
1.
没有一个
没有一个
1.
**胸罩**
艾布拉
如果字符串中有此项,请使用myXmlString=Replace(myXmlString,“$SUB\u SEND”,“MyValueFromConfig”)
并对$COUNTRY\u code
和$DOMAIN
重复上述操作,让我再添加一些要点。我不想硬编码,我想读取所有以$开头的单词,并将其保存在字符串中,然后用配置值替换。所以,如果有人添加了更多的配置元素,而不需要添加更多的替换行,那么该解决方案将更加通用?因此,这不是一个免费的代码编写服务。另外,要替换的值来自何处?我在Replace中尝试了硬编码值,因为所需的值已更改,它应该处理配置文件中的动态值。我是通过“$”上的xmlLine上的Spit撰写的,因为配置名称的格式不同,文本附加了额外的字符。请在原始帖子中发布代码,以便我们能够更好地理解您的问题并提供帮助