我正在尝试从ASP classic中的电子商务API请求xml数据,并将数据“转换”为新的XML并将该数据作为响应返回。
这是ASP脚本。
<%
product_code = Request.QueryString("product_code")
url = "http://www.the site.com/net/WebService.aspx?Login=name@thehost.com&EncryptedPassword=***********&EDI_Name=Generic\Products&SELECT_Columns=p.ProductCode,p.ProductName,pd.ProductDescriptionShort,pe.ListPrice,pe.ProductPrice,pe.SalePrice&WHERE_Column=p.ProductCode&WHERE_Value=" & product_code
Set xData = CreateObject("Microsoft.XMLHTTP")
xData.Open "get", url, False
xData.Send
Response.ContentType = "text/xml"
Response.write (xData.responseText)
Set xData = Nothing
%>
以下是调用API的ASP脚本返回数据的示例。例如,如果上面的页面名为getdata.asp,我将其命名为www.thesite.com/getdata.asp?product_code=m406789,则会返回以下内容。
<?xml version="1.0" encoding="UTF-8"?>
<xmldata>
<Products>
<ProductCode>M406789</ProductCode>
<ProductID>858</ProductID>
<ProductName>M406789 Ignition Box</ProductName>
<ProductDescriptionShort><img alt="" src="/v/vspfiles/assets/images/alliance_small.jpg" align="right" />Ignition Box</ProductDescriptionShort>
<ListPrice>134.2200</ListPrice>
<ProductPrice>80.5300</ProductPrice>
<SalePrice>59.9500</SalePrice>
</Products>
</xmldata>
我想要做的是返回的XML数据如下所示。
<?xml version="1.0" encoding="UTF-8"?>
<hotspot>
<ProductCode>M406789</ProductCode>
<ProductID>858</ProductID>
<ProductName>M406789 Ignition Box</ProductName>
<ProductDescriptionShort><img alt="" src="/v/vspfiles/assets/images/alliance_small.jpg" align="right" />Ignition Box</ProductDescriptionShort>
<ListPrice>134.2200</ListPrice>
<ProductPrice>80.5300</ProductPrice>
<SalePrice>59.9500</SalePrice>
</hotspot>
非常感谢任何帮助或示例代码。不知道在这里采取什么路线。
答案 0 :(得分:1)
可能是这样的:
<%
product_code = Request.QueryString("product_code")
url = "http://www.the site.com/net/WebService.aspx?Login=name@thehost.com&EncryptedPassword=***********&EDI_Name=Generic\Products&SELECT_Columns=p.ProductCode,p.ProductName,pd.ProductDescriptionShort,pe.ListPrice,pe.ProductPrice,pe.SalePrice&WHERE_Column=p.ProductCode&WHERE_Value=" & product_code
Set xData = Server.CreateObject("MSXML2.ServerXMLHTTP")
xData.Open "GET", url, False
xData.Send
Dim xNewDoc
Set xNewDoc = xData.responseXML 'ResponseXml returns DOMDocument object
With xNewDoc
.RemoveChild .FirstChild
.InsertBefore .createProcessingInstruction("xml","version='1.0' encoding='ISO-8859-1'"), .FirstChild
Set hotspot = .CreateElement("hotspot")
For Each e In .SelectSingleNode("//Products").ChildNodes
hotspot.AppendChild e
Next
Set .DocumentElement = hotspot
Response.ContentType = "text/xml"
Response.Write .Xml
End With
Set xNewDoc = Nothing
Set xData = Nothing
%>
答案 1 :(得分:1)
Kul有答案(只是可能会起作用的代码)但是应该说很多未说明的事情。
首先...... Yikes !!!! :
url = "http://www.the site.com/net/WebService.aspx?Login=name@thehost.com&EncryptedPassword=***********&EDI_Name=Generic\Products&SELECT_Columns=p.ProductCode,p.ProductName,pd.ProductDescriptionShort,pe.ListPrice,pe.ProductPrice,pe.SalePrice&WHERE_Column=p.ProductCode&WHERE_Value=" & product_code
将上面的滚动条拇指向右拖动以显示安全管理员的噩梦。清除URL字符串中嵌入的SQL代码!在我看来很可能用这个API来解决令人讨厌的SQL执行,我的猜测是在这些查询字符串后面是一个简单的字符串连接。如果是这样,应该立即从网站上撤回API。
把它从胸前拿走了。使用ServerXMLHTTP与另一台服务器通信,XMLHTTP不是线程安全的,不应该在ASP代码中使用。
为什么选择ISO-8859-1?请留下UTF-8。