使用VBScript读取和修改XML值

时间:2018-11-02 14:11:18

标签: xml vbscript

我有以下XML文件:

 <?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=*REMOVED*">
      <section name="WeighingSystem.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=*REMOVED*" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
    </sectionGroup>
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
  </startup>
  <userSettings>
    <WeighingSystem.Properties.Settings>
      <setting name="ApiBaseUri" serializeAs="String">
        <value>*REMOVED*</value>
      </setting>
      <setting name="ReleaseNumber" serializeAs="String">
        <value>05</value>
      </setting>
      <test>value</test>
    </WeighingSystem.Properties.Settings>
  </userSettings>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="SimpleInjector" publicKeyToken="*REMOVED*" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.3.0.0" />
      </dependentAssembly>
    </assemblyBinding>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Telerik.Windows.Controls" publicKeyToken="*REMOVED*" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2018.2.620.45" newVersion="2018.2.620.45" />
      </dependentAssembly>
    </assemblyBinding>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="*REMOVED*" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-11.0.0.0" newVersion="11.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

我需要创建一个读取RealeaseNumber值(在这种情况下为05)的VBS,根据该值执行某项操作或不执行某项操作,然后用新值修改该值。

我尝试使用此example,但是我无法使其与XML一起使用,因为XML具有更多具有相同[tagname]的节点。我在

下有一个[value]节点
//configuration/userSettings/WeighingSystem.Properties.Settings/setting[@='ApiBaseUri']

和另一个

//configuration/userSettings/WeighingSystem.Properties.Settings/setting[@='ReleaseNumber'] 

一个非常丑陋的解决方案是将整个<value>05</value>行作为字符串值,并读取><之间的内容,但是我希望有一个更优雅的解决方案。 你能帮我吗?

编辑:我的问题不是另一个问题的重复。 “重复”是关于修改属性(例如“ ReleaseNumber”或“ String”)的,在另一种情况下我使用了它。 我不知道如何识别和修改<value>标签之间的值。 如果像在“重复”问题中一样使用Set node = xmlDoc.selectNodes("//Configuration/userSettings/WeighingSystem.Properties.Settings/setting[@key='ReleaseNumber']"),那么让我在行<setting name="ReleaseNumber" serializeAs="String">而不是下面的行中修改一些属性。 如果我使用Set node = xmlDoc.selectNodes("//Configuration/userSettings/WeighingSystem.Properties.Settings/setting[@key='ReleaseNumber']/value"),则会出错。

编辑2: 这是我到目前为止获得的小VBScript,但是无法正常工作。

Set xml = CreateObject("Msxml2.DOMDocument.3.0")
xml.Async = "False"
xml.Load "[path_to_xml]"

strValue = InputBox("Input Value.")
Set Value = xml.SelectSingleNode("//configuration/userSettings/WeighingSystem.Properties.Settings/value")
Value.Text = strValue

strResult = xml.Save("[path_to_xml]")

当我运行它时,它什么也没做。不会使用我的输入来修改值,但它确实可以正常运行。

如果我使用xml.selectSingleNode("//configuration/userSettings/WeighingSystem.Properties.Settings/setting[@name='ReleaseNumber']/value"),那么它将在第7行(Value.Text = strValue)返回错误:对象需要'Value'

此外,我仍然需要实现一个读取值方法(而不是输入框),以便脚本读取该值,然后在需要时对其进行修改。

0 个答案:

没有答案