0

我正在 VBScript 上创建注册表项和参数的 XML 文档。

脚本工作正常,但如果注册表项或注册表参数的名称确实包含特殊符号,如 a /%#\其他 - 它会导致错误msxml6.dll

此名称不应包含符号
错误代码:80004005。

在这个脚本的第 8 行:

Dim root, len
Dim rootPath
rootPath = Split(WScript.Arguments(0), "\")   'Registry key
len = UBound(rootPath)
root = rootPath(len)
Set xmlParser = CreateObject("Msxml2.DOMDocument.6.0")
xmlParserAappendChild(xmlParser.CreateProcessingInstruction("xml", "version='1.0' encoding='utf-8'"))
Set rootNode = xmlParser.AppendChild(xmlParser.CreateElement(root))
Set CreateXml = xmlParser

我试图在谷歌中找到它,但没有成功

我该如何解决?

4

1 回答 1

0

字符/%#\不是 XML 节点名称中的有效字符。

XML 规范

[...]
[4] NameStartChar ::= ":" | [AZ] | "_" | [az] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
[4a] NameChar ::= NameStartChar | "-" | “。” | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
[5] 名称 ::= NameStartChar (NameChar)*
[...]
[40] STag ::= '<' 名称(S 属性)* S? '>' [WFC: 独特的 Att Spec]
[...]

我建议使用通用节点名称(如<key><value>)并将键/值名称作为name这些节点的属性值。例子:

Set xml = CreateObject("Msxml2.DOMDocument.6.0")
Set node = xml.CreateElement("key")
node.SetAttribute("name") = "foo%bar"
于 2018-01-16T09:28:41.933 回答