2008-12-04 2 views
0

У меня недавно есть причина включить в наш скрипт сборки создание файла конфигурации XML. Самый простой способ сделать это - жестко закодировать содержимое XML как строку в скрипте, а затем просто создать файл и записать эту строку XML в файл (названный соответствующим образом и т. Д.). Есть ли более элегантный или эффективный способ сделать это?Создание XML-файла из сценария

Сценарий сборки, который я хочу изменить, написан в VBScript.

ответ

2

вы могли бы использовать, чтобы избежать XmlWriter строк печати. Это упростит запись хорошо сформированных XML-документов.

Вы можете найти бесплатный образец кода в VBScript здесь

http://www.matthewflickinger.com/lab/xmlwriter/

0

Мой окончательное решение: адаптировали 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 
Смежные вопросы