извлекать текст из XML и возвращать преобразованные данные XML в качестве ответа в asp classic - PullRequest
1 голос
/ 09 октября 2011

Я пытаюсь запросить данные XML из API электронной коммерции в ASP classic и «преобразовать» данные в новый 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

%>

Вот пример возвращаемых данных из скрипта ASP, который вызывает API.Например, если приведенная выше страница называется 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 ]

1 голос
/ 10 октября 2011

У Куля есть ответ (ну, просто код, который, вероятно, будет работать), но многое еще не сказано, что следует сказать.

Ну, во-первых ... 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

Перетащите указанную выше полосу прокрутки большим пальцем вправо, чтобы открыть кошмар для менеджеров безопасности.Очистить код SQL, встроенный в строку URL!Мне кажется, что с помощью этого API вполне возможно обойтись, чтобы внедрить неприятное исключение SQL, и я полагаю, что за этими строками запросов лежит простое соединение строк.Если это так, API должен быть удален с веб-сайта с немедленным вступлением в силу.

Сняв это с моей груди.Используйте ServerXMLHTTP для связи с другим сервером, XMLHTTP не является потокобезопасным и не должен использоваться в коде ASP.

Кроме того, почему ISO-8859-1?Просто оставь это в UTF-8.

1 голос
/ 10 октября 2011

Может быть так:

<%
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
%>
...