Classic ASPを使用してXMLでネストされたノードを読み取る

My Classic ASPコードがURLに接続してXMLを表示し、コードが次のように表示されます

Response.ContentType = "text/xml"

myRSSfile = "http://abc.com"

Set getPage = Server.CreateObject("Microsoft.XMLHTTP" )

getPage.Open "GET", myRSSfile, false
getPage.SetRequestHeader "Content-type", "text/xml"
getPage.Send

Response.Write(getPage.responseText)
'response.write getPage.Status

Set getPage = Nothing

XMLは次のようになります





SCG20056-006
<title>Test me machine</title>


We are replacing a built in machine how it would be ?

2011-11-10T22:43:02Z


Raj
lastname


We have been very happpy with the replacement

2011-11-21T21:00:24Z



john
wright


not so happy

2011-11-21T21:00:24Z





What i need to do is display
1) "questions/question/text" Tag
2) Display all the answers to that question that is this tag
"questions/question/answer/user/firstName" Tag
& 3) "questions/question/answer/text" Tag
Is it possible to do in Classic ASP?

2

3 答え

これを使用するアプローチは、XSLを使用して受信したXMLを変換して、表示したいHTMLを生成することです。ここにあなたを始めるためのサンプルがあります:

<?xml version="1.0" encoding="utf-8"?>



  

  
    <div class="container">
      
    </div>
  

  
    Shopper asked: 
    
  • :
  • このxslは、Webサイトのどこかの "userContent.xsl"というファイルに置いておきます。これは例を簡単にするためにrootに入れます。

    今度はあなたのコードを整理する必要があります:

    <%
    Option Explicit 
    Dim myRSSFile: myRSSfile = "http://abc.com"     
    
    Dim getPage: Set getPage = Server.CreateObject("MSXML2.XMLHTTPServer.3.0" )     
    
    getPage.Open "GET", myRSSfile, false        
    getPage.Send     
    
    Dim dom : dom = getPage.responseXml     
    Dim xsl : Set xsl = CreateObject("MSXML2.DOMDocument.3.0")
    
    xsl.async = false
    xsl.load Server.MapPath("/userContent.xsl")
    
    %>
    <html>
       <head>
           <title>Some Content</title>
       </head>
       <body>
         <%
             Response.Write dom.TransformNode(xsl)
         %>
       </body>
    </html>
    

    ノート:

    • ASPでXMLHTTPを使用しないでください。サーバーで使用するようには設計されていません。
    • コンテンツを送信していないときに、xml httpリクエストでコンテンツタイプヘッダーを送信する必要はありません。
    • XMLを受信したいときは、 responseText ではなく読み込んだXMLドキュメントを提供する responseXml プロパティを使用します。 (もちろんRegExを使用しないでください)
    • 常に Option Explicit をスクリプトに含めると、時間のかかる狩猟バグの手間を省くことができます。
    2
    追加された

    私はあなたのすべての助けを借りて最後に、おかげで以下を使用してこれを行うことができました

    <%
    Dim objxml
    Set objxml = Server.CreateObject("MSXML2.FreeThreadedDOMDocument")
    objxml.async = False
    objXML.setProperty "ServerHTTPRequest", True
    objxml.load("http://abc.com")
    set ElemUserContent=objxml.getElementsByTagName("userContent")
    set ElemQuestion=objxml.getElementsByTagName("userContent/questions/question/text")
    set ElemAnswer=objxml.getElementsByTagName("userContent/questions/question/answer")
    set ElemFirstName=objxml.getElementsByTagName("userContent/questions/question/answer/user/firstName")
    set ElemLastName=objxml.getElementsByTagName("userContent/questions/question/answer/user/lastName")
    set ElemAnswerText=objxml.getElementsByTagName("userContent/questions/question/answer/text")
    for x=0 to ElemUserContent.length-1
    response.Write("A Shopper Asked:  "&ElemQuestion.item(x).text)
    response.Write("
      ") for i=0 to ElemAnswer.length-1 response.write("
    • "&ElemFirstName.item(i).text&" "&left(ElemLastName.item(i).text,1)&": ") response.Write(ElemAnswerText.item(i).text&"
    • ") next response.Write("
    ") next %>
    1
    追加された
    1つの質問に複数の答え
    追加された 著者 user580950,
    複数の質問がある場合や、各質問のすべての質問のすべての回答を繰り返すつもりだった場合は、作業する必要がありますか?
    追加された 著者 AnthonyWJones,
    私はあなたの出力を生成するために私の答えを微調整しました。ほとんどの場合、getElementsByTagNameはこの種のものに対しては貧弱な解決策です。
    追加された 著者 AnthonyWJones,

    確かに可能です。

    私は正規表現でそれをしようとします。

    表現を理解するために、多くのオンラインツールがあります。

    edit: classic asp can handle xml documents (I incorrectly thought it had to remain as text, to be parsed) This example: Traverse XML document using asp should help you and is a much better solution than the reg ex option I offered (without totally thinking it through - soz)

    0
    追加された
    XMLの要素を読みたいのですが、正規表現がどのように役立つのでしょうか?なぜなら、正規表現は、XMLのすべての要素を読み取らないコンテンツと一致するために使用されることを知っているからです。
    追加された 著者 user580950,
    この作業に正規表現を使用しないでください。
    追加された 著者 AnthonyWJones,
    正規表現を使用して質問のanswer.textをすべて一致させることができます
    追加された 著者 Neil Thompson,
    同意する。私はあなたが古典的なaspでXML文書を構築できるとは思わなかった。私はそれをうまく反映させるために「答え」を更新しました。
    追加された 著者 Neil Thompson,