2009-09-04 7 views
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  

xmlパターンのシナリオ調査に基づいています。vbscriptがxmlノードを通過する - その他の場合はノードカウント検出

私は次のことを達成したいと思います:はい、その後、数> 0の場合内の各ノードの値を取得するためにループその後、 の存在どのように多くのノード数える場合は、ノードが「フェデックス」 であれば読み

(例:shippingMethod、TotalRate) count = 0の場合は何もしないでください。

数> 0ならばyesの場合、(例:shippingmethod、TotalRate)内の各ノードの値を取得するために、ループ、 内でどのように多くを数える場合は、ノードが「カスタム」 であれば読んで、カウント= 0の場合 、何もしない。

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 

誰かがこれに対する完全な解決法を知っていますか?

+0

なぜURLEncode、あなたはHTMLEncodeを使用すべきではないですか?あなたは最終的な文字列で何をしていますか?あなたはstrItemLineで何もしていないようですね? – AnthonyWJones

+0

また、あなたはXMLがひどく形成されています。文書の最上位にノードが1つしかない場合もあります。 – AnthonyWJones

答えて

3

XMLを整理してルートノードを含み、属性値が ""で囲まれていると仮定します。私の推測では、これはあなたが本当に後が何であるかです: - コードから

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 

あなたはフェデックスとコードが大幅に簡略化されるので、目CUSTOMの間には、実際のdisctinctionはありませんでした提供しました。

+0

こんにちは、この理由は、フェデックスの出力です。レートが見つからない場合は、が表示されます。しかし、私は両方の結果をstrItemLineに組み合わせる必要があります。これは、他のWebサイトサービスに投稿するための完全な文字列です。 –

+0

ほとんどの場合、その時点のレートノードには "shippingMethod"または "TotalRate"要素がありません。XMLをチェックし、比較で大文字と小文字が区別されることに注意してください。 – AnthonyWJones

関連する問題