使用VBScript将XML声明和DOCTYPE添加到XML

时间:2014-07-16 16:02:03

标签: xml vbscript

我无法弄清楚如何将简单的XML和Doctype声明添加到我正在生成的XML文件中。我正在创建和添加节点,但代码似乎并不适合这样做。我的代码如下:

Set xmlDoc = CreateObject("Microsoft.XMLDOM")

Set objDoctype = xmlDoc.createElement("DOCTYPE")
xmlDoc.appendChild objTop

我找到了这个链接:http://www.example-code.com/vbscript/xml_doctype.asp这似乎对我不起作用,因为看起来他们正在将文件编辑为TXT文件。

另外,我需要将此声明添加到我的XML文件的顶部:

<?xml version="1.0" encoding="UTF-8"?>

感谢您的帮助!

修改

我希望在XML文件的顶部看到:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE catalog SYSTEM "shopstyle-catalog.dtd">

谢谢!

1 个答案:

答案 0 :(得分:1)

我发现没有简单的方法可以通过XMLDOM / MSXML2 API将doctype声明添加到现有文档(*)。它appears to be impossible(参见&#34;备注&#34;部分)。引用,强调我的:

  

您无法创建NODE_DOCUMENT类型的节点, NODE_DOCUMENT_TYPE ,NODE_ENTITY或NODE_NOTATION。

但是,这对XSLT来说是一项微不足道的任务。这个微小的转换为您的输入文档添加了XML声明和doctype - 并且它将输入转码为您指定的任何输出编码(我强烈建议将其保留为UTF-8)。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output omit-xml-declaration="no" encoding="UTF-8" method="xml" />
  <xsl:output doctype-system="shopstyle-catalog.dtd" />

  <xsl:template match="node() | @*">
    <xsl:copy><xsl:apply-templates select="node() | @*" /></xsl:copy>
  </xsl:template>
</xsl:stylesheet>

输入文档的其余部分将逐字复制。

有无数的例子说明如何将XSL样式表应用于各种语言和环境的XML文档,所以我不打算在这里讨论。


(*)如果您从头开始创建文档 ,有一种方法:您可以使用{{3}而不是尝试以编程方式创建doctype声明。加载已包含想要的doctype声明的骨架XML字符串。