从脚本生成XML文件
我最近有理由在构建脚本中包含XML配置文件的创建。我能想到的最简单的方法是将XML内容硬编码为字符串,然后创建一个文件并将该XML字符串写入该文件(适当命名等)。有没有更优雅或有效的方法从脚本生成XML文件,xml,performance,vbscript,Xml,Performance,Vbscript,我最近有理由在构建脚本中包含XML配置文件的创建。我能想到的最简单的方法是将XML内容硬编码为字符串,然后创建一个文件并将该XML字符串写入该文件(适当命名等)。有没有更优雅或有效的方法 我想修改的生成脚本是用vbScript .< /p> 编写的。如果考虑字符串:非常重要的是:,可以使用XMLWrror来避免打印字符串。这将使编写格式良好的XML文档变得更加容易 您可以在这里的VBScript中找到免费的示例代码 我的最后一个解决方案是:修改了divo提到的XMLWriter(除了一两处更改
我想修改的生成脚本是用vbScript .< /p> 编写的。如果考虑字符串:非常重要的是:,可以使用XMLWrror来避免打印字符串。这将使编写格式良好的XML文档变得更加容易 您可以在这里的VBScript中找到免费的示例代码
我的最后一个解决方案是:修改了divo提到的XMLWriter(除了一两处更改之外,基本上就是这样使用的,因为这个脚本要在客户机上运行)。还修改了源代码以打印XML(以便输出到文件时可读):
函数XMLToString(节点)
暗网
retStr=“”
XMLToString=retStr&vbNewLine&NodesToString(节点,0)
端函数
函数NodesToString(节点,缩进)
Dim xNode
暗网
retStr=“”
对于节点中的每个xNode
选择Case xNode.nodeType
案例1:'节点\单元
如果xNode.nodeName为“#文档”,则
'将DisplayAttrs_(xNode,缩进+2)更改为
'显示内联属性的属性属性(xNode,0)
retStr=retStr&VBNewLine&strDup(“,缩进)&”
如果xNode.hasChildNodes,则
retStr=retStr&NodesToString(xNode.childNodes,缩进+2)
如果结束
retStr=retStr&VBNewLine&strDup(“,缩进)&”
其他的
如果xNode.hasChildNodes,则
retStr=retStr&NodesToString(xNode.childNodes,缩进+2)
如果结束
如果结束
案例3:'节点\文本
retStr=retStr&VBNewLine&strDup(“,缩进)&xNode.nodeValue
结束选择
下一个
NodesToString=retStr
端函数
函数属性字符串(节点)
Dim xAttr,res
res=“”
对于Node.attributes中的每个xAttr
res=res&&xAttr.name&&xAttr.value&
下一个
AttributesToString=res
端函数
函数strDup(dup,c)
昏暗的天空,我
res=“”
对于i=1到c
res=res&dup
下一个
strDup=res
端函数
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