views:

777

answers:

1
    myXML=   "<?xml version=1.0 encoding=iso-8859-1 ?>" & vbcrlf & _
      "<shippingRates code=fedex >" & vbcrlf & _
      "<errorMsg>" & vbcrlf & _
      "Sorry, no rates returned." & vbcrlf & _
      "</errorMsg>" & vbcrlf & _
      "</shippingRates>" & vbcrlf & _

      "<shippingRates code=CUSTOM >" & vbcrlf & _

      "<shippingRate index=0 >" & vbcrlf & _
      "<TotalRate>0.29</TotalRate>" & vbcrlf & _
      "<HandlingFee>0.00</HandlingFee>" & vbcrlf & _
      "<DisplayHandlingFeeOpt>1</DisplayHandlingFeeOpt>" & vbcrlf & _
      "<shippingMethod>shipping option 1 </shippingMethod>" & vbcrlf & _
      "</shippingRate>" & vbcrlf & _

      "<shippingRate index=1 >" & vbcrlf & _
      "<TotalRate>2.91</TotalRate>" & vbcrlf & _
      "<HandlingFee>43.69</HandlingFee>" & vbcrlf & _
      "<DisplayHandlingFeeOpt>1</DisplayHandlingFeeOpt>" & vbcrlf & _
      "<shippingMethod>shipping option 2 </shippingMethod>" & vbcrlf & _
      "</shippingRate>" & vbcrlf & _

      "</shippingRates>" & vbcrlf



    Dim oXML: Set oXML = Server.CreateObject("Microsoft.XMLDOM")    
    oXML.loadXML(myXML)         'to load from string directly

Based on the xml Pattern scenario study.

I would like to achieve the following:

read if the node is 'fedex' if yes, then count how many node exist if count>0, then loop into to get value of each node inside (eg: shippingMethod, TotalRate) if count=0, do nothing.

read if the node is 'CUSTOM' if yes, then count how many inside if count>0, then loop into to get value of each node inside (eg: shippingmethod, TotalRate) if count=0, do nothing.

    iItem= 0


    set shippingRates_node = oXML.getElementsByTagName("shippingRates")

    for each itemNodes in shippingRates_node(0).ChildNodes


    set shippingRate_node = oXML.getElementsByTagName("shippingRate")

    if code= "fedex" then
     how to count?


     if count>0 then

            for each item in itemNodes.ChildNodes

                    if item.nodeName = "shippingMethod" Then                        
                            strItemLine= strItemLine & "&" & Server.URLEncode("L_SHIPPINGOPTIONNAME" & iItem) & "=" & Server.URLEncode(item.Text)
                    end if                 

                    if item.nodeName = "shippingRate" Then
                            strItemLine= strItemLine & "&" & Server.URLEncode("L_SHIPPINGOPTIONAMOUNT" & iItem) & "=" & Server.URLEncode(item.Text)
                    end if                  
            next


            iItem= iItem + 1


     end if

    end if



    if code= "CUSTOM" then
     how to count?


     if count>0 then

            for each item in itemNodes.ChildNodes

                    if item.nodeName = "shippingMethod" Then                        
                            strItemLine= strItemLine & "&" & Server.URLEncode("L_SHIPPINGOPTIONNAME" & iItem) & "=" & Server.URLEncode(item.Text)
                    end if                 

                    if item.nodeName = "shippingRate" Then
                            strItemLine= strItemLine & "&" & Server.URLEncode("L_SHIPPINGOPTIONAMOUNT" & iItem) & "=" & Server.URLEncode(item.Text)
                    end if                  
            next


            iItem= iItem + 1


     end if

    end if



    Next


TotalShippingOptions= iItem

Anyone know a complete solution to this?

+1  A: 

Lets assume you've tidied up that XML so that it has containing root node and the attribute values are enclosed in "". My guess is this is what you are really after:-

Dim oXML: Set oXML = CreateObject("MSXML2.DOMDocument.3.0")    
oXML.loadXML(myXML)         '' # to load from string directly     
Dim iItem : iItem = 0
Dim shippingMethod, totalRate
Dim strItemLine : strItemLine = ""
Dim rate

For Each rate In oXML.documentElement.selectNodes("shippingRates/shippingRate")
  shippingMethod = rate.selectSingleNode("shippingMethod").Text
  totalRate = rate.selectSingleNode("TotalRate").Text
  strItemLine = strItemLine & "&" & Server.URLEncode("L_SHIPPINGOPTIONNAME" & iItem) & "=" & Server.URLEncode(shippingMethod)
  strItemLine = strItemLine & "&" & Server.URLEncode("L_SHIPPINGOPTIONAMOUNT" & iItem) & "=" & Server.URLEncode(totalRate)
  iItem = iItem + 1
Next

From the code you provided there was no actual disctinction between Fedex and CUSTOM hence th code is significantly simplified.

AnthonyWJones
hi ya, the reason of this is, fedex's output, sometimes will have rate, sometimes won't have rate. If rate not found, will show the <errorMsg> . However I need to combine both result into strItemLine, which is a full string- for me to post to other website service.
i need help
Most likely the rate node at that point doesn't have a "shippingMethod" or "TotalRate" element, check your XML and note the comparisons are case sensitive.
AnthonyWJones