首先我想说,我认为我的问题可能是耗费时间让人们完全解决它,所以我明白完全答案是完全可能要求的方式太多,所以任何能帮助我更好理解的东西,比如:阅读材料,例子,链接和/或建议都很棒,我非常感谢我收到的任何评论,不管是好还是坏,它只会让我和这个地方变得更好,最后我非常感谢你们在这里所做的一切,这真的是一个由聪明人和关心的人建立的地方。
我的问题
(使用经典ASP和SQL Server)
我知道可以读取远程XML文件,然后将其插入SQL Server数据库表。我找到了一个例子,它使用经典ASP和MS Access,但可以使用最少的编码将其更改为SQL Server: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文件导出到SQL Server数据库的示例(如执行BULK插入,请参阅URL:http://support.microsoft.com/kb/316005)以及如何提取一些信息。从XML但我的请求有点奇怪,因为我想首先检查Country
,然后只获取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>
依旧......
现在我想将该信息插入名为FFTR
的SQL Server表中,并为每个JURISDICTION
例如,上面将是:
Field Name 1 --> "JURISDICTION_AB_CAN"
Field Name 2 --> "JURISDICTION_FL_US"
and so on...
注意:
前缀JURISDICTION_
将始终相同,只有两个字母会更改,而CAN
可能会变为US
。
另一件事是,如果COUNTRY是“CAN”,那么我想使用CAN Rate,如果是美国,我想使用美国费率并插入该信息。使用名为“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>
我甚至认为将它添加到ADODB Recordset会很棒,然后我会将它逐个插入到SQL Server中,或者只是将其全部循环到那里,但它只显示我需要行的列也在那里。请参阅以下代码:
<%
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>
再次,非常感谢您提供任何建议,链接或任何帮助......
答案 0 :(得分:0)
看看这里:msxml DOM
您应该使用msxml对象来读取xml。然后你可以使用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
%>
答案 1 :(得分:0)
最后!!!我让它工作,如果有人需要它的解决方案如下: 使用我在问题中发布的代码,我添加了以下代码:
注意:我知道这不是最好的方法,因为我没有追踪TAGS / ID / Names但是xml文件总是保持格式化所以我只是循环,切出我需要的东西,并插入/更新到数据库中。
<%
' 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和/或更新,如果这对任何人都有问题,请告诉我,我会更乐意提供帮助。
对于所有试图解决我的问题/问题的人,非常感谢您的辛勤工作和努力。