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?

2
  • Why URLEncode, are you sure you shouldn't be using HTMLEncode? What do you do with the final string? You don't seem to be doing anything with strItemLine? Commented Sep 4, 2009 at 10:56
  • Also you XML is badly formed you can only have one node at the top level of the document Commented Sep 4, 2009 at 11:00

1 Answer 1

3

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.

Sign up to request clarification or add additional context in comments.

2 Comments

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.