2

まず最初に、私の質問は人々が完全な意味でそれを解決するのに時間がかかるかもしれないと思うので、完全な答えがあまりにも多くを求めている可能性があることを理解しています。資料、例、リンク、アドバイスを読むことは素晴らしいことであり、私が受け取ったすべてのコメントに感謝します。良いか悪いかを問わず、私とこの場所をより良くすることができます。ここでのすべてのことに感謝します。ここは本当に賢い人々と気遣う人々によって建てられた場所です。

私の質問

(ClassicASPとSQLServerを使用)

リモートXMLファイルを読み取って、それをSQLServerデータベーステーブルに挿入することが可能であることを私は知っています。クラシックASPとMSAccessを使用しているが、URLのコーディングを最小限に抑えてSQLServerに変更できる例を1つ見つけました。http://forums.aspfree.com/code-bank-54/classic-asp-import -remote-xml-file-into-database-152966.html

しかし、問題は、リモートXMLファイルで動作させることができないことです。クラシックaspコード(上記のリンクにあります)を何日も編集しようとしましたが、希望どおりに動作させることができません。

だから最初から始めたい、

問題のXMLファイルは次の場所にあります:http ://www.iftach.org/taxmatrix/charts/2Q2012.xml

xmlファイル全体をSQLServerデータベースにエクスポートする方法(BULK挿入を行うなど、URL:http ://support.microsoft.com/kb/316005を参照)と抽出方法に関するいくつかの例を見ました。いくつかの情報。CountryXMLからですが、最初にチェックしてからそれだけを取得し、もう一方は取得したくないので、私の要求はちょっと奇妙ですCounties Rate。xmlファイル全体に対してこれを実行したいと思います。

たとえば、xmlファイルは次のようなものです:(
または、上のURLをクリックして完全なxmlファイルを表示できます)

<FILE>
<QUARTER>2Q2012</QUARTER>
<RECORD>
<JURISDICTION ID="#15">AB</JURISDICTION>
<COUNTRY>CAN</COUNTRY>
......
......
<RATE RATECHANGE="0" COUNTRY="US">0.3366</RATE>
<RATE RATECHANGE="0" COUNTRY="CAN">0.0900</RATE>
......
......
......
</RECORD>

<RECORD>
<JURISDICTION ID="#15">FL</JURISDICTION>
<COUNTRY>U.S.</COUNTRY>
......
......
<RATE RATECHANGE="0" COUNTRY="US">1.5700</RATE>
<RATE RATECHANGE="0" COUNTRY="CAN">1.3210</RATE>
......
......
......
</RECORD>
</FILE>

等々....

次に、その情報をと呼ばれるSQL Serverテーブルに挿入しFFTR、それぞれに固有の列に名前を付けます。JURISDICTION

たとえば、上記のようになります。

Field Name 1 --> "JURISDICTION_AB_CAN"
Field Name 2 --> "JURISDICTION_FL_US"
and so on...

注:
プレフィックスJURISDICTION_は常に同じになり、2文字だけが変更され、にCANなる可能性がありUSます。

もう1つは、国が「CAN」の場合はCANレートを使用し、米国の場合はUSレートを使用してその情報を挿入します。「RATE」という名前のフィールドを使用してデータベースに追加します。(レートは常に小数点以下4桁になります)必要なレートは以下のみです<FUEL_TYPE>Special Diesel</FUEL_TYPE>。他のレートは必要ありません。

そして最後にやりたいのは<QUARTER>2Q2012</QUARTER>「Quarter」という名前のフィールドに挿入することです

したがって、最終的なSQL Serverデータベースは次のようになります(上記の例として2つのレコードを使用)

Field Name: JURISDICTION_AB_CAN
Rate: 0.0900
Quarter: 2Q2012

Field Name: JURISDICTION_FL_US
Rate: 1.5700
Quarter: 2Q2012

だから私がやろうとしたのはこれであり(以下のコードを参照)、各行を表示するようになりましたが、解決策にさえ近づいていません:

<% 
   Option Explicit 
   Response.Buffer = True 
   Dim xml 
   Set xml = Server.CreateObject("Microsoft.XMLDOM") 
   xml.async = False 
   xml.setProperty "ServerHTTPRequest", True 
   xml.Load ("http://www.iftach.org/TaxMatrix/charts/2Q2012.xml") 
   Dim paragraph1,paragraph2,paragraph3,paragraph4,paragraph5,paragraph6

   paragraph1 = xml.documentElement.childNodes(1).text
   paragraph2 = xml.documentElement.childNodes(2).text
   paragraph3 = xml.documentElement.childNodes(3).text
   paragraph4 = xml.documentElement.childNodes(4).text
   paragraph5 = xml.documentElement.childNodes(5).text
   paragraph6 = xml.documentElement.childNodes(6).text

   Set xml = Nothing 
%> 
<html> 
   <head> 
   <title></title> 
   </head> 
   <body> 
   <p align="center"><% = paragraph1 %></p>
   <p align="center"><% = paragraph2 %></p>
   <p align="center"><% = paragraph3 %></p>
   <p align="center"><% = paragraph4 %></p>
   <p align="center"><% = paragraph5 %></p>
   <p align="center"><% = paragraph6 %></p>
</body>
</html> 

それをADODBRecordsetに追加するのは素晴らしいことだと思います。それから、SQL Serverに1つずつ挿入するか、すべてをループしますが、そこに必要な行しか表示されません。以下のコードを参照してください。

<%
 Dim objRS
 Set objRS =  Server.CreateObject("ADODB.Recordset")
  objRS.ActiveConnection = "Provider=MSDAOSP; Data Source=MSXML2.DSOControl.3.0;"
  objRS.Open(Server.MapPath("2Q2012.xml"))


Response.Write(objRS.Fields(2) & "<br>") ' <-- Returns the Quarter only, that I need for the Quarter Field in the DB

'Response.Write(objRS.Fields(6) & "<br>") ' <-- Returns the entire xml page

Do While Not objRS.EOF

 objRS.MoveNext
 Loop


%>

<table border="1" width="100%">
 <%
 dim fld
 Response.Write("<tr>")
 For Each fld in objRS.Fields
 If fld.Name <> "$Text" Then
 Response.Write("<td>" & fld.Name & "</td>")
 End If
 Next
 Response.Write("</tr>")
 Do While Not objRS.EOF
 Response.Write("<tr>")
 For Each fld in objRS.Fields
 If fld.Name <> "$Text" Then
 Response.Write("<td>" & fld.Value & "</td>")
 End If
 Next
 Response.Write("</tr>")
 objRS.MoveNext
 Loop
 %>
 </table>

繰り返しになりますが、アドバイス、リンク、またはヘルプをありがとうございました...

4

2 に答える 2

0

ついに!!!私はそれを機能させました、誰かが解決策を必要とするならば、それは以下にあります:私が質問に投稿したコードを使用して、私は次のコードを追加しました:

注:TAGS / IDs / Namesを追跡しないため、これが最善の方法ではないことはわかっていますが、xmlファイルは常に同じ形式のままなので、ループして必要なものを切り取り、挿入しました/DBに更新されました。

    <%
    ' LOOP ALL OF THE FIELDS ONE BY ONE
     For x = 0 to xml.documentelement.childnodes.length - 1
     set XMLobjchildnodes = xml.documentelement.childnodes
     strXMLtxt=xml.documentElement.childNodes(x).text & "<br>"


    ' SETUP THE UPDATE FIELDS FOR SQL
     dim strTest
     strTest="objSQL(""IMP_STATE_" & Mid(strXMLtxt,1,2) & """)=" & Mid(strXMLtxt,46,7)

    ' SKIP THE Fi and 2Q because they are not States/Prov.
    if strTest="objSQL(""IMP_STATE_Fi"")=" OR strTest="objSQL(""IMP_STATE_2Q"")=" then
    else

    ' ALSO SKIP hi and U and CN because they also are not States/Prov.
    if InStr(strTest,"STATE_ht")>0 OR InStr(strTest,"STATE_U.")>0 OR InStr(strTest,"STATE_CN")>0 then
    else

    ' ADD YOUR SQL CONNECTION INFO. HERE AND THEN INSERT/UPDATE THE SQL DB


    end if
Next
    %>

注:小さな変更を加えることで、SQLにデータを挿入したり更新したりするように設定できます。これが問題になる場合は、喜んでサポートさせていただきますので、お知らせください。

私の問題/質問を解決しようとしたすべての人に、あなたの努力と努力のすべてに感謝します。

于 2012-06-21T16:10:10.543 に答える
0

こちらをご覧ください:msxml DOM

xmlを読み取るには、msxmlオブジェクトを使用する必要があります。次に、APIを使用してxmlの要素をクエリできます。

xmlをロードするためのサンプルコード:

<%
dim xml : set xml = server.createobject("Msxml2.DOMDocument.6.0")
dim xmlString : xmlString = getXMLHTTPResponse("http://www.iftach.org/TaxMatrix/charts/2Q2012.xml")
xml.loadxml(xmlString)

function getXMLHTTPResponse(url)
    dim tout, xmlhttp

    set xmlhttp = server.createObject("Msxml2.ServerXMLHTTP.6.0")
    with xmlhttp
        .setTimeouts 2000, 2000, 2000, 2000
        .open "GET", url, false
        .send()
        if .responseXML.xml = "" then
            getXMLHTTPResponse = .responseText
        else
            getXMLHTTPResponse = .responseXML.xml
        end if
    end with
end function
%>
于 2012-06-21T09:36:59.633 に答える