从xml中提取文本并返回转换后的xml数据作为asp经典中的响应

时间:2011-10-09 18:27:03

标签: xml vbscript asp-classic

我正在尝试从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>&lt;img alt="" src="/v/vspfiles/assets/images/alliance_small.jpg" align="right" /&gt;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>&lt;img alt="" src="/v/vspfiles/assets/images/alliance_small.jpg" align="right" /&gt;Ignition Box</ProductDescriptionShort>
    <ListPrice>134.2200</ListPrice>
    <ProductPrice>80.5300</ProductPrice>
    <SalePrice>59.9500</SalePrice>
</hotspot>

非常感谢任何帮助或示例代码。不知道在这里采取什么路线。

2 个答案:

答案 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。