我在字符串中有一个XML。当我尝试在VBScript中使用Msxml2.DOMDocument.6.0
对象的Load
方法加载此XML时,它总是返回false,并且XML是有效的XML。
这是XML:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE cXML SYSTEM "http://xml.cxml.org/schemas/cXML/1.2.014/cXML.dtd">
<cXML>
jsgdjgs
</cXML>
以下是VBScript代码:
payloadXML = "<?xml version=""1.0"" encoding=""UTF-8""?><!DOCTYPE cXML SYSTEM ""http://xml.cxml.org/schemas/cXML/1.2.014/cXML.dtd""><cXML>jsgdjgs</cXML>"
Set xmlDoc = Server.CreateObject("Msxml2.DOMDocument.6.0")
xmlLoadSuccess = xmlDoc.load(payloadXML)
If Not xmlLoadSuccess Then
Response.Write(xmlLoadSuccess)
End If
有人能指导我做错了什么吗?通过相同的方法,我可以像这样加载XML:
<abc>
<firstName>jgg</firstName>
<lastName>hfgyhg</lastName>
</abc>
答案 0 :(得分:1)
您正在尝试加载XML字符串。 Load()
方法用于从文件加载XML。对于XML字符串,请使用LoadXML()
方法:
Set xmlDoc = Server.CreateObject("Msxml2.DOMDocument.6.0")
xmlLoadSuccess = xmlDoc.LoadXML(payloadXML)
此外,要使用DTD加载XML,您需要allow DTDs和disable validation during parsing。我还建议启用同步处理。
Set xmlDoc = Server.CreateObject("Msxml2.DOMDocument.6.0")
xmlDoc.Async = False
xmlDoc.SetProperty "ProhibitDTD", False
xmlDoc.ValidateOnParse = False
xmlLoadSuccess = xmlDoc.LoadXML(payloadXML)
请注意,调试时LoadXML()
方法的返回值并非常有用,因为它没有提供有关 出错的任何线索。使用ParseError
属性可获取更多有用信息:
If xmlDoc.ParseError <> 0 Then
WScript.Echo "0x" & Hex(xmlDoc.ParseError) & ": " & xmlDoc.ParseError.Reason
WScript.Quit 1
End If