为什么当我在Response.Write xmlHTTP.ResponseXML中使用以下内容时,出现500错误" XML解析错误:语法错误"
<%
set xmlHTTP = Server.CreateObject("MSXML2.XMLHTTP.3.0")
xmlHTTP.open "Get", "http://www.w3schools.com/xml/note.xml", false
xmlHTTP.send()
Response.ContentType = "text/xml"
Response.Write xmlHTTP.ResponseXML
set xmlHTTP = Nothing
%>
当我使用Response.Write xmlHTTP.ResponseText时,如下所示一切正常。不是请求对URL XML的响应吗?如果不是那么在什么情况下会使用ResponseXML?如果可能的话,示例会有所帮助。
<%
set xmlHTTP = Server.CreateObject("MSXML2.XMLHTTP.3.0")
xmlHTTP.open "Get", "http://www.w3schools.com/xml/note.xml", false
xmlHTTP.send()
Response.ContentType = "text/xml"
Response.Write xmlHTTP.ResponseText
set xmlHTTP = Nothing
%>
答案 0 :(得分:3)
问题是您正在尝试Response.Write()
包含对象引用而不是字符串的ResponseXML
属性。
ResponseText
属性不会失败的原因是因为它是ResponseXML
中包含的XML结构的字符串表示形式,可以通过Response.Write()
方法传递。< / p>
如果要访问ResponseXML
中包含的原始XML,请使用ResponseXML.xml
属性。以下是如何使用它的示例;
<%
Dim xmlHTTP
Set xmlHTTP = Server.CreateObject("Msxml2.ServerXMLHTTP.6.0")
xmlHTTP.Open("GET", "http://www.w3schools.com/xml/note.xml", False)
Call xmlHTTP.Send()
Response.ContentType = "text/xml"
Call Response.Write(xmlHTTP.ResponseXML.xml)
Set xmlHTTP = Nothing
%>
旁注: 仅仅是为了完整性@Noodles does mention this但是在这样一轮的方式中它还不清楚是什么解决方案是。
答案 1 :(得分:2)
我已阅读文档。
<强>说明强>
该属性是只读的。出于安全原因,始终关闭解析器验证功能以防止Microsoft®XMLCore Services(MSXML)尝试下载文档类型定义(DTD)或XML数据定义。如果响应实体主体不是有效的XML,则此属性返回已解析的DOMDocument,以便您可以访问该错误。此属性不返回IXMLDOMParseError本身,但可以从DOMDocument访问它。
如果响应是由Active Server Pages(ASP)页面生成的,并且多用途Internet邮件扩展(MIME)类型未使用ASP方法Response.ContentType正确设置为支持的MIME类型之一,则responseXML将为空
MSXML 6.0支持的MIME类型包括:“text / xml”,“application / xml”或以“+ xml”结尾的任何内容,例如“application / rss + xml”。
MSXML 6.0之前版本支持的MIME类型为:“text / xml”,“application / xml”。
注意您使用的是Ver 3.尝试6。
此前还有另一条评论,你真的应该阅读。只是指出你使用的是版本3,MIME类型是有限的。另外,看看这些其他对象是否有效。
PS结果是针对Vista
C:\Users>reg query hkcr /f xmlhttp
HKEY_CLASSES_ROOT\Microsoft.XMLHTTP
HKEY_CLASSES_ROOT\Microsoft.XMLHTTP.1.0
HKEY_CLASSES_ROOT\Msxml2.ServerXMLHTTP
HKEY_CLASSES_ROOT\Msxml2.ServerXMLHTTP.3.0
HKEY_CLASSES_ROOT\Msxml2.ServerXMLHTTP.4.0
HKEY_CLASSES_ROOT\Msxml2.ServerXMLHTTP.5.0
HKEY_CLASSES_ROOT\Msxml2.ServerXMLHTTP.6.0
HKEY_CLASSES_ROOT\Msxml2.XMLHTTP
HKEY_CLASSES_ROOT\Msxml2.XMLHTTP.3.0
HKEY_CLASSES_ROOT\Msxml2.XMLHTTP.4.0
HKEY_CLASSES_ROOT\Msxml2.XMLHTTP.5.0
HKEY_CLASSES_ROOT\Msxml2.XMLHTTP.6.0
End of search: 12 match(es) found.
另请注意,在发生锁定之前,您可以调用任何特定XMLHTTP对象的次数有限制。如果发生(并且在调试代码时发生),只需更改为其他XMLHTTP对象
答案 2 :(得分:0)
今天有类似的问题,所以我登陆了这个帖子。在我们的例子中,这是由于XML响应中的特殊字符。