为什么我无法在VBScript中加载XML?

时间:2017-02-27 09:56:14

标签: xml dom vbscript xml-parsing

我在字符串中有一个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>

1 个答案:

答案 0 :(得分:1)

您正在尝试加载XML字符串。 Load()方法用于从文件加载XML。对于XML字符串,请使用LoadXML()方法:

Set xmlDoc = Server.CreateObject("Msxml2.DOMDocument.6.0")
xmlLoadSuccess = xmlDoc.LoadXML(payloadXML)

此外,要使用DTD加载XML,您需要allow DTDsdisable 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