我有以下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'
此外,我仍然需要实现一个读取值方法(而不是输入框),以便脚本读取该值,然后在需要时对其进行修改。