如何使用 VBScript 将 DOCTYPE 属性 设置为 XML DOM?
How to set the DOCTYPE property to XML DOM using VBScript?
我使用 Msxml2.DOMDocument.6 创建了一个 XML 文件。通过 VBscript 库。
当前代码:
Set oXMLDoc = CreateObject("Msxml2.DOMDocument.6.0")
Set bookmap = oXMLDoc.createElement("bookmap")
oXMLDoc.appendChild bookmap
Set booktitle = oXMLDoc.createElement("booktitle")
bookmap.appendChild booktitle
Set mainbooktitle = oXMLDoc.createElement("mainbooktitle")
booktitle.appendChild mainbooktitle
Set booktitlealt = oXMLDoc.createElement("booktitlealt")
booktitle.appendChild booktitlealt
Set frontmatter = oXMLDoc.createElement("frontmatter")
bookmap.appendChild frontmatter
Set keydef1 = oXMLDoc.createElement("keydef")
frontmatter.appendChild keydef1
keydef1.setAttribute "keys", "copyright"
Set topicmeta1 = oXMLDoc.createElement("topicmeta")
keydef1.appendChild topicmeta1
Set keywords1 = oXMLDoc.createElement("keywords")
topicmeta1.appendChild keywords1
Set keyword1 = oXMLDoc.createElement("keyword")
keywords1.appendChild keyword1
Set keydef2 = oXMLDoc.createElement("keydef")
frontmatter.appendChild keydef2
keydef2.setAttribute "keys", "trademarks"
Set topicmeta2 = oXMLDoc.createElement("topicmeta")
keydef2.appendChild topicmeta2
Set keywords2 = oXMLDoc.createElement("keywords")
topicmeta2.appendChild keywords2
Set keyword2 = oXMLDoc.createElement("keyword")
keywords2.appendChild keyword2
Set keydef3 = oXMLDoc.createElement("keydef")
frontmatter.appendChild keydef3
keydef3.setAttribute "keys", "trademarks"
Set topicmeta3 = oXMLDoc.createElement("topicmeta")
keydef3.appendChild topicmeta3
Set keywords3 = oXMLDoc.createElement("keywords")
topicmeta3.appendChild keywords3
Set keyword3 = oXMLDoc.createElement("keyword")
keywords3.appendChild keyword3
Set notices = oXMLDoc.createElement("notices")
frontmatter.appendChild notices
Set booklists = oXMLDoc.createElement("booklists")
frontmatter.appendChild booklists
Set toc = oXMLDoc.createElement("toc")
booklists.appendChild toc
Set chapter = oXMLDoc.createElement("chapter")
bookmap.appendChild chapter
Set oIntro = oXMLDoc.createProcessingInstruction("xml","version='1.0' encoding='UTF-8'")
oXMLDoc.insertBefore oIntro,oXMLDoc.childNodes(0)
oXMLDoc.Save currentDirectory & "/output/maps/"& stringtoReplace & ".ditamap"
是否有方法或 属性 将 DOCTYPE 设置为以下内容:
<!DOCTYPE bookmap PUBLIC "-//OASIS//DTD DITA BookMap//EN" "bookmap.dtd">
实际输出
<?xml version="1.0" encoding="UTF-8"?>
<bookmap>
<booktitle>
<mainbooktitle/>
<booktitlealt/>
</booktitle>
<frontmatter>
<keydef keys="copyright">
<topicmeta>
<keywords>
<keyword/>
</keywords>
</topicmeta>
</keydef>
<keydef keys="trademarks">
<topicmeta>
<keywords>
<keyword/>
</keywords>
</topicmeta>
</keydef>
<keydef keys="trademarks">
<topicmeta>
<keywords>
<keyword/>
</keywords>
</topicmeta>
</keydef>
<notices/>
<booklists>
<toc/>
</booklists>
</frontmatter>
<chapter/>
</bookmap>
预期输出
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE bookmap PUBLIC "-//OASIS//DTD DITA BookMap//EN" "bookmap.dtd">
<bookmap>
<booktitle>
<mainbooktitle/>
<booktitlealt/>
</booktitle>
<frontmatter>
<keydef keys="copyright">
<topicmeta>
<keywords>
<keyword/>
</keywords>
</topicmeta>
</keydef>
<keydef keys="trademarks">
<topicmeta>
<keywords>
<keyword/>
</keywords>
</topicmeta>
</keydef>
<keydef keys="trademarks">
<topicmeta>
<keywords>
<keyword/>
</keywords>
</topicmeta>
</keydef>
<notices/>
<booklists>
<toc/>
</booklists>
</frontmatter>
<chapter/>
</bookmap>
在现有脚本的顶部试试这个:
Set oXMLDoc = CreateObject("Msxml2.DOMDocument.6.0")
oXMLDoc.setProperty "ProhibitDTD", False
oXMLDoc.validateOnParse = False
oXMLDoc.resolveExternals = False
xmlTemplate = "<!DOCTYPE bookmap PUBLIC ""-//OASIS//DTD DITA BookMap//EN"" ""bookmap.dtd"">" & vbCrLf & _
"<bookmap />"
Loaded = oXMLDoc.loadXML(xmlTemplate)
If Not Loaded Then
WScript.Echo oXMLDoc.parseError.reason
WScript.Quit 1
End If
Set bookmap = (oXMLDoc.getElementsByTagName("bookmap"))(0)
这应该允许您创建 DTD 而不会产生错误 "DTD is prohibited",并且应该允许您预填充一个现有的 XML 模板,您可以立即加载。
旁注:我无法在不产生错误 "This operation can not be performed on DOCTYPE node."
的情况下调用 oXMLDoc.createNode(10, "bookmap", "bookmap.dtd")
希望对您有所帮助。
我使用 Msxml2.DOMDocument.6 创建了一个 XML 文件。通过 VBscript 库。
当前代码:
Set oXMLDoc = CreateObject("Msxml2.DOMDocument.6.0")
Set bookmap = oXMLDoc.createElement("bookmap")
oXMLDoc.appendChild bookmap
Set booktitle = oXMLDoc.createElement("booktitle")
bookmap.appendChild booktitle
Set mainbooktitle = oXMLDoc.createElement("mainbooktitle")
booktitle.appendChild mainbooktitle
Set booktitlealt = oXMLDoc.createElement("booktitlealt")
booktitle.appendChild booktitlealt
Set frontmatter = oXMLDoc.createElement("frontmatter")
bookmap.appendChild frontmatter
Set keydef1 = oXMLDoc.createElement("keydef")
frontmatter.appendChild keydef1
keydef1.setAttribute "keys", "copyright"
Set topicmeta1 = oXMLDoc.createElement("topicmeta")
keydef1.appendChild topicmeta1
Set keywords1 = oXMLDoc.createElement("keywords")
topicmeta1.appendChild keywords1
Set keyword1 = oXMLDoc.createElement("keyword")
keywords1.appendChild keyword1
Set keydef2 = oXMLDoc.createElement("keydef")
frontmatter.appendChild keydef2
keydef2.setAttribute "keys", "trademarks"
Set topicmeta2 = oXMLDoc.createElement("topicmeta")
keydef2.appendChild topicmeta2
Set keywords2 = oXMLDoc.createElement("keywords")
topicmeta2.appendChild keywords2
Set keyword2 = oXMLDoc.createElement("keyword")
keywords2.appendChild keyword2
Set keydef3 = oXMLDoc.createElement("keydef")
frontmatter.appendChild keydef3
keydef3.setAttribute "keys", "trademarks"
Set topicmeta3 = oXMLDoc.createElement("topicmeta")
keydef3.appendChild topicmeta3
Set keywords3 = oXMLDoc.createElement("keywords")
topicmeta3.appendChild keywords3
Set keyword3 = oXMLDoc.createElement("keyword")
keywords3.appendChild keyword3
Set notices = oXMLDoc.createElement("notices")
frontmatter.appendChild notices
Set booklists = oXMLDoc.createElement("booklists")
frontmatter.appendChild booklists
Set toc = oXMLDoc.createElement("toc")
booklists.appendChild toc
Set chapter = oXMLDoc.createElement("chapter")
bookmap.appendChild chapter
Set oIntro = oXMLDoc.createProcessingInstruction("xml","version='1.0' encoding='UTF-8'")
oXMLDoc.insertBefore oIntro,oXMLDoc.childNodes(0)
oXMLDoc.Save currentDirectory & "/output/maps/"& stringtoReplace & ".ditamap"
是否有方法或 属性 将 DOCTYPE 设置为以下内容:
<!DOCTYPE bookmap PUBLIC "-//OASIS//DTD DITA BookMap//EN" "bookmap.dtd">
实际输出
<?xml version="1.0" encoding="UTF-8"?>
<bookmap>
<booktitle>
<mainbooktitle/>
<booktitlealt/>
</booktitle>
<frontmatter>
<keydef keys="copyright">
<topicmeta>
<keywords>
<keyword/>
</keywords>
</topicmeta>
</keydef>
<keydef keys="trademarks">
<topicmeta>
<keywords>
<keyword/>
</keywords>
</topicmeta>
</keydef>
<keydef keys="trademarks">
<topicmeta>
<keywords>
<keyword/>
</keywords>
</topicmeta>
</keydef>
<notices/>
<booklists>
<toc/>
</booklists>
</frontmatter>
<chapter/>
</bookmap>
预期输出
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE bookmap PUBLIC "-//OASIS//DTD DITA BookMap//EN" "bookmap.dtd">
<bookmap>
<booktitle>
<mainbooktitle/>
<booktitlealt/>
</booktitle>
<frontmatter>
<keydef keys="copyright">
<topicmeta>
<keywords>
<keyword/>
</keywords>
</topicmeta>
</keydef>
<keydef keys="trademarks">
<topicmeta>
<keywords>
<keyword/>
</keywords>
</topicmeta>
</keydef>
<keydef keys="trademarks">
<topicmeta>
<keywords>
<keyword/>
</keywords>
</topicmeta>
</keydef>
<notices/>
<booklists>
<toc/>
</booklists>
</frontmatter>
<chapter/>
</bookmap>
在现有脚本的顶部试试这个:
Set oXMLDoc = CreateObject("Msxml2.DOMDocument.6.0")
oXMLDoc.setProperty "ProhibitDTD", False
oXMLDoc.validateOnParse = False
oXMLDoc.resolveExternals = False
xmlTemplate = "<!DOCTYPE bookmap PUBLIC ""-//OASIS//DTD DITA BookMap//EN"" ""bookmap.dtd"">" & vbCrLf & _
"<bookmap />"
Loaded = oXMLDoc.loadXML(xmlTemplate)
If Not Loaded Then
WScript.Echo oXMLDoc.parseError.reason
WScript.Quit 1
End If
Set bookmap = (oXMLDoc.getElementsByTagName("bookmap"))(0)
这应该允许您创建 DTD 而不会产生错误 "DTD is prohibited",并且应该允许您预填充一个现有的 XML 模板,您可以立即加载。
旁注:我无法在不产生错误 "This operation can not be performed on DOCTYPE node."
的情况下调用 oXMLDoc.createNode(10, "bookmap", "bookmap.dtd")希望对您有所帮助。