经典的ASP.loadXML(XMLstring)读取为空?

经典的ASP.loadXML(XMLstring)读取为空?,xml,parsing,soap,vbscript,asp-classic,Xml,Parsing,Soap,Vbscript,Asp Classic,我正在使用经典ASP解析从eBay api发送的SOAP XML通知。我正在发布一条来自api文档的测试示例SOAP消息。我能够接收XML数据字符串。当我将数据转换为字符串并将xmlString输出为文本文件时,收到的XML就在其中 当我将XML(xmlString)加载到DOMDocument对象并尝试输出它时,得到的只是3行空行。我试图循环遍历元素并解析它们,但是DOM对象内部似乎是空白的,因为我在查找节点的行中遇到了需要对象的错误 这是我的代码,以及我正在发布的XML消息(使用Postma

我正在使用经典ASP解析从eBay api发送的SOAP XML通知。我正在发布一条来自api文档的测试示例SOAP消息。我能够接收XML数据字符串。当我将数据转换为字符串并将xmlString输出为文本文件时,收到的XML就在其中

当我将XML(xmlString)加载到DOMDocument对象并尝试输出它时,得到的只是3行空行。我试图循环遍历元素并解析它们,但是DOM对象内部似乎是空白的,因为我在查找节点的行中遇到了需要对象的错误

这是我的代码,以及我正在发布的XML消息(使用Postmaster应用程序),希望您能提供一些指导


发布的SOAP消息示例(来自postman应用程序):


Z2yhKdKmS0Ga5VPmLDOAlg==
2008-02-13T03:47:28.106Z
成功
137541140
553
e553_核心_捆绑_6057805_R1
物品出售
卖家1
假的
符合条件的项目
10
美国
美元
0
诺希特计数器
250000627102
假的
假的
真的
10
1
0
假的
2008-02-13T03:42:45.000Z
2008-02-13T03:43:32.000Z
http://cgi.qa-api012.qa.ebay.com/ws/eBayISAPI.dll?ViewItem&项目=25000062712&;类别=1463
假的
假的
假的
http://cgi.qa-api012.qa.ebay.com/Test-Item-Won-Sold-notify_W0QQitemZ250000627102QQcategoryZ1463QQcmdZViewItem
第5天
中国人
加利福尼亚州圣何塞
付款说明
贝宝
ve2@aol.com
1463
收藏品:交易卡:电话卡
假的
1.
0
假的
假的
seller@email.com
100
98.1
假的
绿松石
假的
真的
假的
2004-02-23T23:50:13.000Z
美国
证实
卖家1
假的
2004-02-23T23:48:54.000Z
诺瓦塔克斯
真的
真的
假的
真的
选择素
假的
没有一个
假的
假的
假的
真的
假的
2.
0.25
1.25
1.25
假的
nY+sHZ2PrBmdj6wVnY+sEZ2PrA2dj6wJkoWoCJaGoAmdj6x9nY+序列==
buyer@email.com
5.
100
假的
没有一个
假的
真的
假的
2004-02-24T07:00:00.000Z
美国
证实
买方1
假的
2004-02-24T07:00:00.000Z
诺瓦塔克斯
美国
95125
假的
0
1.5
1.
真的
真的
完整的
真的
假的
不闻不问
0
假的
假的
美国
美国
1
PT0
测试项目{赢得/售出}通知
0
假的
没有一个
假的

在测试代码之后,导致问题的不是
字符集
属性(但无论如何,我会确保它设置为
UTF-8

问题是XML无法解析,在检查
parseError
时发现了这个问题

-1072896749-此位置不允许空白

然后我看了一下您发布的XML,它确实有一些硬包装,我将其删除并再次测试,这次它成功了

修改的XML(已删除硬包装)


Z2yhKdKmS0Ga5VPmLDOAlg==
2008-02-13T03:47:28.106Z

  • (由于使用了
    BytesToStr()
    函数,这要归功于)

  • 公认的解决方案肯定是问题的答案

    但我想展示和MSXML鲜为人知的功能相关的其他方法

    这样,处理XML请求体也可以以更可靠的二进制安全方式完成,而无需进行字符串转换、可能的字符集/编码问题等

    方法可以处理ASP的请求对象、流对象(或对象实现)或无符号字节的安全数组

    参数

    xmlSource[in]

    要分析的源XML的指示符。这可能是一个URL(字符串/BSTR),一个请求对象(在ASP页面中)[1]一个IStream[3]安全字节数组(VT|U数组| VT|U UI1)[2]、DOMDocument对象或任何 支持IStream、ISequentialStream或IPersistStream的对象。 有关更多信息,请参见备注。isSuccessful[输出,返回]

    基于解决方案(感谢信用BTW),从简单到复杂:

    方法#1-请求的
    对象

    […] 设置xdoc=Server.CreateObject(“MSXML2.DOMDocument.6.0”) xdoc.async=False loaded=xdoc.load(请求) '[...]
    方法#2-安全阵列

    […] 设置xdoc=Server.CreateObject(“MSXML2.DOMDocument.6.0”) xdoc.async=False loaded=xdoc.Load(Request.BinaryRead(lngBytesCount)) '[...]
    方法#3-
    Adodb.Stream
    对象(二进制类型)

    […] 设置xdoc=Server.CreateObject(“MSXML2.DOMDocument.6.0”) xdoc.async=False 暗二进制流 Set binaryStream=Server.CreateObject(“Adodb.Stream”) binaryStream.Type=1'adTypeBinary binaryStream.Ope