загрузить XML-данные с внешнего сайта, а затем отправить ответ обратно в XML-браузер - PullRequest
0 голосов
/ 07 сентября 2011

Мне нужно запросить данные у API, проанализировать конкретные данные и вернуть ответ в xml.

Пока у меня есть то, что работает нормально, но возвращает только текст, а не xml

<%
dim objXMLL
Dim objXML, objXSL, x

Set objXML = CreateObject("MSXML2.DOMDocument")
objXML.async = False
objXML.setProperty "ServerHTTPRequest", True
objXML.Load "http://www.theapisite.com/net/WebService.aspx?Login=name@thesite.com&EncryptedPassword=2873287372372326372638374837473473674634763784637843648736&EDI_Name=Generic\Products&SELECT_Columns=p.ProductCode,pe.Availability&WHERE_Column=p.ProductCode&WHERE_Value=1430-09"
objXML.setProperty "SelectionLanguage", "XPath"

For Each x In objXML.documentElement.selectNodes(".//Products")
Response.write x.nodename & " = " & x.Text 
Next
%>

Вот XML, возвращенный из API.

<?xml version="1.0" encoding="UTF-8"?>
    <xmldata>
         <Products>
              <ProductCode>1430-09</ProductCode>
              <ProductID>37717</ProductID>
              <Availability>Out of Stock</Availability>
         </Products>
    </xmldata>

Это то, что я хочу отправить обратно в браузер в качестве ответа вместо текста.Как отправить только нужный мне XML и вернуть его в ответ с именами, как показано.

<?xml version="1.0" encoding="UTF-8"?>
    <data>
         <Products>
              <Product>1430-09</Product>
              <ID>37717</ID>
         </Products>
    </data>

1 Ответ

1 голос
/ 07 сентября 2011

Если я правильно вас понимаю, вы хотите преобразовать XML-ответ HTTP-запроса в другую схему и записать его в браузер? В этом случае вы можете использовать XSL Transform . Или вы можете программно создать новый XML-документ в вашем ASP и скопировать данные по необходимости

Dim xmldoc: set xmldoc = CreateObject("MSXML2.DomDocument")
xmldoc.async = false
' add the xml processing instruction
Dim instruction
Set instruction = xmldoc.createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8""")
xmldoc.appendChild instruction 
' create the root nodes
Dim data: set data = xmldoc.createElement("data")
xmldoc.appendChild data
Dim products: set products = xmldoc.createElement("Products")
data.appendChild products

Dim x
For Each x In objXML.documentElement.selectNodes(".//Products")
     ' get each child node
     Dim productcode: Set productcode = x.selectSingleNode("ProductCode")
     Dim productid: Set productid = x.selectSingleNode("ProductID")
     ' pass over the data from old node to new
     Dim product: Set product = xmldoc.createElement("Product")
     product.text = productcode.text
     products.appendChild product
     Dim id: set id = xmldoc.createElement("ID")
     id.text = productid.text
     products.appendChild id
Next
' write the final xml to the response stream
Response.Write xmldoc.xml

В зависимости от размера входного XML, вы можете сравнить производительность между этим и использованием XSL-преобразования

...