使用CDATA的VBScript XML缩进 [英] VBScript XML indentation with CDATA

查看:116
本文介绍了使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆