经典的ASP.loadXML(XMLstring)读取为空?
我正在使用经典ASP解析从eBay api发送的SOAP XML通知。我正在发布一条来自api文档的测试示例SOAP消息。我能够接收XML数据字符串。当我将数据转换为字符串并将xmlString输出为文本文件时,收到的XML就在其中 当我将XML(xmlString)加载到DOMDocument对象并尝试输出它时,得到的只是3行空行。我试图循环遍历元素并解析它们,但是DOM对象内部似乎是空白的,因为我在查找节点的行中遇到了需要对象的错误 这是我的代码,以及我正在发布的XML消息(使用Postmaster应用程序),希望您能提供一些指导经典的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
发布的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