2008-12-04 111 views
0

我最近有一個理由將我們的構建腳本包含到XML配置文件的創建中。我能想到的最直接的方法就是將XML內容作爲字符串硬編碼到腳本中,然後簡單地創建一個文件並將該XML字符串寫入該文件(正確命名等)。有沒有更優雅或有效的方式來做到這一點?從腳本生成XML文件

我正在修改的構建腳本是用VBScript編寫的。如果你考慮串

回答

0

我的最終解決方案:適用於通過DIVO提到XMLWriter的(使用它幾乎原樣,除了一個或兩個變化因爲這個腳本是在客戶端上運行的)。還修改了here的代碼以漂亮地打印XML(以便在輸出到文件時可讀):

Function XMLToString(Nodes) 
    dim retStr 
    retStr = "<?xml version=""1.0"" encoding=""utf-8"" ?>" 
    XMLToString = retStr & vbNewLine & NodesToString(Nodes, 0) 
End Function 

Function NodesToString(Nodes, Indent) 
    Dim xNode 
    Dim retStr 

    retStr = "" 
    For Each xNode In Nodes 
     Select Case xNode.nodeType 
     Case 1: ' NODE_ELEMENT 
      If xNode.nodeName <> "#document" Then 
      ' change DisplayAttrs_(xNode, Indent + 2) to 
      ' DisplayAttrs_(xNode, 0) for inline attributes 
      retStr = retStr & VBNewLine & strDup(" ", Indent) & "<" & xNode.nodeName & AttributesToString(xNode) & ">" 
      If xNode.hasChildNodes Then 
       retStr = retStr & NodesToString(xNode.childNodes, Indent + 2) 
      End If 
      retStr = retStr & VBNewLine & strDup(" ", Indent) & "</" & xNode.nodeName & ">" 
      Else 
      If xNode.hasChildNodes Then 
       retStr = retStr & NodesToString(xNode.childNodes, Indent + 2) 
      End If 
      End If 
     Case 3: ' NODE_TEXT      
      retStr = retStr & VBNewLine & strDup(" ", Indent) & xNode.nodeValue 
     End Select 
    Next 

    NodesToString = retStr 
End Function 

Function AttributesToString(Node) 
    Dim xAttr, res 

    res = "" 
    For Each xAttr In Node.attributes 
     res = res & " " & xAttr.name & "=""" & xAttr.value & """" 
    Next 

    AttributesToString = res 
End Function 

Function strDup(dup, c) 
    Dim res, i 

    res = "" 
    For i = 1 To c 
    res = res & dup 
    Next 
    strDup = res 
End Function