【问题标题】:Modifying XML PARENT NODE using VB script使用 VB 脚本修改 XML PARENT NODE
【发布时间】:2012-05-17 20:43:51
【问题描述】:

我正在尝试修改 XML 节点名称而不是其值。我不能这样做。而且我必须修改父节点名称。请帮忙。

示例 XML 在这里。在这个 XML 中,我需要将 ICOSTx 修改为 ICOS_ORDER_TX。请有人帮助做到这一点。我必须修改大约 50K xmls。尽快帮助我。如果可能的话,把代码寄给我。 ipand.19@gmail.com。如果还有VBscript以外的代码,请告诉我。

         <ICOSTx SOURCETYPE="XX" >
    <HEADER>
    <ID>                        49909171</ID>
    <EMP>P9004952</EMP>
    <STARTDT>10/04/2012 14:23:04</STARTDT>
    <TOTAL>5849.59</TOTAL>
    <CNP>1</CNP>
    </HEADER>
   </ICOSTx>

【问题讨论】:

    标签: xml vbscript


    【解决方案1】:

    基于来自here的信息:

    由于 .tagName 是只读的,因此您必须创建一个具有合适名称的新节点,克隆要更改的节点,然后用新节点替换旧节点。在代码中:

      Dim sFSpec : sFSpec    = resolvePath( "..\data\00.xml" )
      WScript.Echo goFS.OpenTextFile(sFSpec).ReadAll()
      Dim oXDoc  : Set oXDoc = CreateObject( "Msxml2.DOMDocument" )
      oXDoc.setProperty "SelectionLanguage", "XPath"
      oXDoc.async = False
      oXDoc.load sFSpec
    
      If 0 = oXDoc.ParseError Then
         WScript.Echo sFSpec, "looks ok"
         Dim sXPath, ndFnd
         sXPath    = "/ICOSTx"
         Set ndFnd = oXDoc.selectSingleNode( sXPath )
         If ndFnd Is Nothing Then
            WScript.Echo "|", sXPath, "| not found"
         Else
            WScript.Echo "found   |" & ndFnd.tagName & "|"
           On Error Resume Next
            ndFnd.tagName = "ICOS_ORDER_TX"
            WScript.Echo "** Bingo:", Err.Description
           On Error Goto 0
            Dim ndParent : Set ndParent = ndFnd.parentNode
            Dim ndNew    : Set ndNew    = oXDoc.createElement("ICOS_ORDER_TX")
            ndNew.appendChild ndFnd.firstChild.cloneNode(True)
            ndParent.removeChild ndFnd
            ndParent.appendChild ndNew
            sFSpec = resolvePath( "..\data\02.xml" )
            oXDoc.save sFSpec
            WScript.Echo goFS.OpenTextFile(sFSpec).ReadAll()
         End If
      Else
         WScript.Echo oXDoc.ParseError.Reason
      End If
    

    输出:

    <ICOSTx SOURCETYPE="XX">
     <HEADER>
      <ID>49909171</ID>
      <EMP>P9004952</EMP>
      <STARTDT>10/04/2012 14:23:04</STARTDT>
      <TOTAL>5849.59</TOTAL>
      <CNP>1</CNP>
     </HEADER>
    </ICOSTx>
    
    E:\trials\SoTrials\answers\10632220\data\00.xml looks ok
    found   |ICOSTx|
    ** Bingo: Wrong number of arguments or invalid property assignment
    <ICOS_ORDER_TX><HEADER>
                    <ID>49909171</ID>
                    <EMP>P9004952</EMP>
                    <STARTDT>10/04/2012 14:23:04</STARTDT>
                    <TOTAL>5849.59</TOTAL>
                    <CNP>1</CNP>
            </HEADER>
    </ICOS_ORDER_TX>
    

    【讨论】:

    • 嗨 Ekkehard..感谢您的代码。但是我在执行相同的操作时遇到以下错误。请帮助我。给我完整的详细信息。我想更新特定文件夹中存在的许多 xml。请查找错误:Microsoft VBScript 运行时错误:类型不匹配:'resolvePath
    • @kavin resolvePath() 只是我获取绝对路径的函数;对您的文件规范进行硬编码,使用 FSO.GetAbsolutePathName,或自行编写。
    猜你喜欢
    • 1970-01-01
    • 2017-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-11
    • 1970-01-01
    相关资源
    最近更新 更多