vbscript更新属性xml

问题描述 投票:0回答:1
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    <bean id="Account_Update" class="com.salesforce.dataloader.process.ProcessRunner" singleton="false">
        <description>Account Update</description>
        <property name="name" value="Account_Update"/>
        <property name="configOverrideMap">
            <map>
                <entry key="dataAccess.name" value="E:\FileShare\XYZ\Account_Update\Input\Account_Update.csv"/>
                <entry key="dataAccess.readUTF8" value="true"/>
                <entry key="dataAccess.type" value="csvRead"/>
                <entry key="dataAccess.writeUTF8" value="true"/>
                <entry key="process.enableExtractStatusOutput" value="true"/>
                <entry key="process.enableLastRunOutput" value="false"/>
                <entry key="process.lastRunOutputDirectory" value="L:\Data_Load_Jobs\XYZ\Account_Load_Job\Log"/>
                <entry key="process.mappingFile" value="L:\Data_Load_Jobs\XYZ\Account_Update_Job\config\Account_Upload.sdl"/>
                <entry key="process.operation" value="upsert"/>
                <entry key="process.statusOutputDirectory" value="E:\FileShare\XYZ\Account_Update\Output"/>
                <entry key="sfdc.bulkApiCheckStatusInterval" value="5000"/>
                <entry key="sfdc.bulkApiSerialMode" value="5000"/>
                <entry key="sfdc.debugMessages" value="false"/>
                <entry key="sfdc.enableRetries" value="true"/>
                <entry key="sfdc.entity" value="Account"/>
                <entry key="sfdc.externalIdField" value="External_ID__c"/>
                <entry key="sfdc.extractionRequestSize" value="500"/>
                <entry key="sfdc.insertNulls" value="false"/>
                <entry key="sfdc.loadBatchSize" value="50"/>
                <entry key="sfdc.maxRetries" value="3"/>
                <entry key="sfdc.minRetrySleepSecs" value="2"/>
                <entry key="sfdc.noCompression" value="false"/>             
                <entry key="sfdc.timeoutSecs" value="60"/>
                <entry key="sfdc.useBulkApi" value="false"/>
            </map>
        </property>
    </bean>
</beans>

从上面的XML,我想基于entry更新key节点的值。这是我试图实现的目标,但它不起作用。您能否建议代码中需要更改哪些内容?

Option Explicit

'On Error Resume Next

Dim xmlDoc, nNode, strResult, wshShell, ProgramFiles, objFSO

Set wshShell = CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")

Set xmlDoc = CreateObject("Microsoft.XMLDOM")

xmlDoc.Load "E:\Avijit\process-conf.xml" 
Set nNode = xmlDoc.SelectSingleNode("//benas/bean[@id='DE_OTC_Account_Update']/property[@name='configOverrideMap']/map/entry[@key='dataAccess.name']") 
nNode.Attributes.getNamedItem("value").Text = "NewValue" 
strResult = xmlDoc.Save("E:\Avijit\process-conf.xml")

Set xmlDoc = Nothing
Set wshShell = Nothing
Set nNode = Nothing
Set objFSO = Nothing
WScript.Quit
xml vbscript
1个回答
0
投票

我看到你的代码有三个问题:

  • 你的XPath表达式中有一个拼写错误。将benas改为beans
  • 示例XML中id属性的值为“Account_Update”,而不是“DE_OTC_Account_Update”。
  • 要更改属性值,请使用节点对象的SetAttribute属性: nNode.SetAttribute("value") = "NewValue"

此外,Microsoft.XMLDOM已弃用,不应再使用。使用Msxml2.DOMDocument代替:

...
Set xmlDoc = CreateObject("Msxml2.DOMDocument.6.0")
xmlDoc.Async = False
xmlDoc.Load "E:\Avijit\process-conf.xml"
...
© www.soinside.com 2019 - 2024. All rights reserved.