使用CDATA的VBScript XML缩进 [英] VBScript XML indentation with CDATA
本文介绍了使用CDATA的VBScript XML缩进的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想从VBScript生成XML文件.我找到了Microsoft.XMLDOM
,但似乎此类不知道如何缩进输出文件.我尝试使用MSXML2重新插入xml,但是当我使用它时,我的CDATA部分消失了.
I would like to generate a XML file from VBScript. I found Microsoft.XMLDOM
but it seems this class does not know how to indent my output file. I tried to use MSXML2 to reindent my xml but when I use it my CDATA sections vanished...
VBScript:
set xml = CreateObject("Microsoft.XMLDOM")
set encoding = xml.createProcessingInstruction("xml", "version='1.0' encoding='ISO-8859-1'")
xml.insertBefore encoding, xml.childNodes.Item(0)
set foo = xml.createElement("foo")
foo.setAttribute "foobar", "42"
set bar = xml.createElement("bar")
set cdata = xml.createCDATASection("Hello World!")
bar.appendChild cdata
foo.appendChild bar
xml.appendChild(foo)
' XML okay but ugly because no indentation
xml.save("a.xml")
' XML pretty but the 'cdata' sections vanished...
xmlSave xml, "b.xml"
function xmlSave(xml, filename)
set rdr = CreateObject("MSXML2.SAXXMLReader")
set wrt = CreateObject("MSXML2.MXXMLWriter")
Set oStream = CreateObject("ADODB.STREAM")
oStream.Open
oStream.Charset = "ISO-8859-1"
wrt.indent = True
wrt.encoding = "ISO-8859-1"
wrt.output = oStream
Set rdr.contentHandler = wrt
Set rdr.errorHandler = wrt
rdr.Parse xml
wrt.flush
oStream.SaveToFile filename, 2
end function
输出:
$ cscript //nologo test.vbs && cat a.xml && echo -e "------" && cat b.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<foo foobar="42"><bar><![CDATA[Hello World!]]></bar></foo>
------
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<foo foobar="42">
<bar>Hello World!</bar>
</foo>
如何在不丢失CDATA部分的情况下轻松地使用XMLDOM获得一个好的缩进XML?
How can I easily get a nice indented XML with XMLDOM without loosing my CDATA sections ?
推荐答案
我发现了一些可行的方法...
I found something that works...
Function ParseAndSave(filePath, xmlDoc)
set xmlWriter = CreateObject("MSXML2.MXXMLWriter")
set xmlReader = CreateObject("MSXML2.SAXXMLReader")
Set xmlStream = CreateObject("ADODB.STREAM")
xmlStream.Open
xmlStream.Charset = "ISO-8859-1"
xmlWriter.output = xmlStream
xmlWriter.indent = True
xmlWriter.standalone = True
xmlWriter.encoding = "ISO-8859-1"
Set xmlReader.contentHandler = xmlWriter
Set xmlReader.DTDHandler = xmlWriter
Set xmlReader.errorHandler = xmlWriter
xmlReader.putProperty "http://xml.org/sax/properties/lexical-handler", xmlWriter
xmlReader.putProperty "http://xml.org/sax/properties/declaration-handler", xmlWriter
xmlReader.parse xmlDoc
xmlWriter.flush
xmlStream.SaveToFile filePath, 2
xmlStream.Close
Set xmlStream = Nothing
Set xmlWriter = Nothing
Set xmlReader = Nothing
End Function
这篇关于使用CDATA的VBScript XML缩进的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文