2010-12-22 4 views
0

Matin Tous,Afficher les données XML avec ASP classique

J'ai du mal à faire fonctionner ce code. J'ai passé des heures à l'accorder, à le modifier ... et ça ne marchera toujours pas.

<% 
Dim nTitle, nDescription, nWeight, nImage, nPrice, StoreMemberID, nDobaID, StoreItemCatID, nTrue, nFalse, MarkupPerc, nYes, nNo 
Dim nFileName, intNewID, paryProducts 

FUNCTION FetchProductRecords(str) 

    Dim objHTTP, RSSURL, RSSFeed, xmlRSSFeed, RSSItems, objItem, objChild, paryOut, nCell 
    Redim paryOut(6,-1) 
    nCell = 0 
    RSSURL = "http://www.storeboard.com/excel/" & str 

    Set objHTTP = Server.CreateObject("Msxml2.ServerXMLHTTP") 
    objHTTP.open "GET",RSSURL,false 
    objHTTP.send 
    RSSFeed = objHTTP.responseText 

    Set xmlRSSFeed = Server.CreateObject("MSXML2.DomDocument") 
    xmlRSSFeed.async = false 
    xmlRSSFeed.LoadXml(RSSFeed) 
    Set objHTTP = Nothing 

    Set RSSItems = xmlRSSFeed.getElementsByTagName("Row") 
    Set xmlRSSFeed = Nothing 

    Redim preserve paryOut(6,RSSItems.length-1) 
    FOR i = 0 TO RSSItems.length - 1 
    Set RSSItem = RSSItems.Item(i) 
    FOR EACH objChild IN RSSItem.childNodes 
     IF nCell = 3 THEN 
     paryOut(0,i) = objChild.text 
     ELSEIF nCell = 5 THEN 
     paryOut(1,i) = objChild.text 
     ELSEIF nCell = 7 THEN 
     paryOut(2,i) = objChild.text 
     ELSEIF nCell = 27 THEN 
     paryOut(3,i) = objChild.text 
     ELSEIF nCell = 23 THEN 
     paryOut(4,i) = objChild.text 
     ELSEIF nCell = 40 THEN 
     paryOut(5,i) = objChild.text 
     END IF 
     nCell = nCell + 1 
    NEXT 
    nCell = 0 
    NEXT 
    FetchProductRecords = paryOut 
END FUNCTION 

paryProducts = FetchProductRecords(nFileName) 
IF isArray(paryProducts) THEN 
%> 
<table cellpadding="0" cellspacing="0" border="1" width="100%"> 
    <tr style="background-color:#000000;color:#FFFFFF;font-weight:bold;font-family:Arial, Helvetica, sans-serif;font-size:10px"> 
    <td style="padding:5px" align="center">DOBA ID</td> 
    <td style="padding:5px" align="center">TITLE</td> 
    <td style="padding:5px" align="center">DESCRIPTION</td> 
    <td style="padding:5px" align="center">PRICE</td> 
    <td style="padding:5px" align="center">WEIGHT</td> 
    <td style="padding:5px" align="center">IMAGE</td> 
    </tr> 
    <% FOR i = 0 TO uBound(paryProducts,2) %> 
    <% IF i > 0 THEN ' to avoid the header %> 
    <tr style="font-family:Arial, Helvetica, sans-serif;font-size:10px"> 
    <td style="padding:5px"><%=paryProducts(0,i)%></td> 
    <td style="padding:5px"><%=paryProducts(1,i)%></td> 
    <td style="padding:5px"><%=paryProducts(2,i)%></td> 
    <td style="padding:5px"><%=paryProducts(3,i)%></td> 
    <td style="padding:5px"><%=paryProducts(4,i)%></td> 
    <td style="padding:5px"><%=paryProducts(5,i)%></td> 
    </tr> 
    <% END IF %> 
    <% NEXT %> 
</table> 
<% END IF %> 

Dans l'ensemble, le fichier XML contient 40 champs. Vous pouvez consulter le fichier xml ici: http://www.storeboard.com/excel/cameras2.xml

J'apprécierais toute aide avec ce code afin que je puisse enfin terminer.

ont un grand jour et un Joyeux Noël, Paul

Répondre

0

Vous n'avez défini le nFileName d'être "cameras2.xml", non?

nFileName = "cameras2.xml" 
paryProducts = FetchProductRecords(nFileName) 

Autre que cela, il fonctionne très bien de ma machine ..

Si votre application et XML résident sur le même site, puis consultez cet article INFO: Do Not Send ServerXMLHTTP or WinHTTP Requests to the Same Server

+0

Cela fonctionne également sur ma machine, mais je ne pense pas que ce soit le problème de @ neojakey car une inspection plus poussée des données permet de voir que les numéros de cellules ne correspondent pas. Cela suppose bien sûr que son application ne prenne pas le temps d'extraire le fichier XML de 1,17 Mo. ;-) – stealthyninja

+0

@stealthyninja, le fichier semble avoir expiré/supprimé :( –

0

@neojakey: Le problème que je vois est que le nombre de cellules dans chaque rangée ne correspond pas. Dans la première rangée (l'en-tête), il y a 45 cellules. Chaque rangée suivante a moins de cellules, mais jamais jusqu'à 45 et elles ne semblent pas corréler non plus. J'ai aligné la deuxième données de ligne avec la première ligne pour vous montrer ce que je veux dire:

+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 0 | supplier_id   | 4                          | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 1 | drop_ship_fee   | 0                          | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 2 | supplier_name   | Diamond                        | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 3 | product_id    | 17697                         | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 4 | product_sku   | BCR10                         | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 5 | title     | OmniSource 10 12 AC/DC Charger                  | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 6 | warranty    | OmniSource 10 12 AC/DC Charger/Reconditioner for VHS &amp; VHS-C (9.6V to 12V) full size camcorders | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 7 | description   | new                         | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 8 | condition    | Lenmar                        | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 9 | details    | 0                          | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 10 | manufacturer   | 2010-12-19T17:24:23.000                    | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 11 | brand_name    | 22091                         | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 12 | case_pack_quantity  | BCR10                         | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 13 | country_of_origin  | 2147483647                       | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 14 | product_last_update | 2147483647                       | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 15 | item_id    | OmniSource 10 12 AC/DC Charger                  | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 16 | item_sku    | 0                          | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 17 | mpn     | 0                          | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 18 | upc     | 1.95                         | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 19 | item_name    | 8.27                         | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 20 | item_weight   | 28.01                         | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 21 | ship_alone    | 27.2                         | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 22 | ship_freight   | 69.95                         | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 23 | ship_weight   | 4                          | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 24 | ship_cost    | in-stock                        | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 25 | max_ship_single_box | 0                          | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 26 | map     | 2010-12-16T15:06:25.000                    | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 27 | price     | Catalog||Electronics &amp; computer||Camera &amp; photo||Digital camera accessories     | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 28 | custom_price   | http://images.doba.com/products/4/images_prodLarge_BCR10.jpg           | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 29 | prepay_price   | 400                         | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 30 | street_price   | 400                         | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 31 | msrp     | 0                          | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 32 | qty_avail    |                          | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 33 | stock     |                          | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 34 | est_avail    |                          | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 35 | qty_on_order   |                          | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 36 | item_last_update  |                          | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 37 | item_discontinued_date |                          | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 38 | categories    |                          | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 39 | attributes    |                          | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 40 | image_file    |                          | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 41 | image_width   |                          | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 42 | image_height   |                          | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 43 | additional_images  |                          | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 
| 44 | is_customized   |                          | 
+----+------------------------+-------------------------------------------------------------------------------------------------------+ 

Depuis le product_id ne passe de 3 et title ne se déplace de n ° 5, l'application semble fonctionner. Cependant, les champs description, price, weight et image sont rompus en raison de la non-concordance des données. Si vous mettez à jour le code où vous boucle à travers RSSItem.childNodes à

IF nCell = 3 THEN 
    paryOut(0,i) = objChild.text 'product_id' 
ELSEIF nCell = 5 THEN 
    paryOut(1,i) = objChild.text 'title' 
ELSEIF nCell = 6 THEN 
    paryOut(2,i) = objChild.text 'description' 
ELSEIF nCell = 27 THEN 
    paryOut(3,i) = objChild.text 'price - could be ?' 
ELSEIF nCell = 23 THEN 
    paryOut(4,i) = objChild.text 'weight - could be ?' 
ELSEIF nCell = 28 THEN 
    paryOut(5,i) = objChild.text 'image' 
END IF 

... ce problème sera résolu pour beaucoup de vos produits et vous obtenez au moins le droit description au lieu de condition de produit, ainsi que le image_file plus souvent que jamais du tout.

La solution au problème consiste cependant à obtenir ce qui génère les données en premier lieu pour produire <Cell>0</Cell> s'il ne peut pas trouver une valeur pour la cellule d'en-tête qu'il est censé afficher au lieu de ne pas le sortir à tout ce qui est en désordre avec la logique codée en dur de votre application.