Прежде всего, я хотел бы сказать, что я думаю, что мой вопрос может занять много времени, чтобы люди могли его решить в полном смысле, поэтому я понимаю, что вполне возможно, что полный ответ слишком много просит, поэтому все, что поможет мне лучше понять, например: чтение материалов, примеров, ссылок и/или советов, было бы замечательно, и я очень ценю любые комментарии, которые я получаю, хорошие или плохие, просто делает меня и это место намного лучше, наконец, я хотел бы поблагодарить всех вас за все, что вы здесь делаете, это действительно место, которое было создано умными людьми и людьми, которые заботятся.Классический ASP Импорт удаленного XML-файла в SQL Server
МОЙ ВОПРОС
(используя классический ASP и SQL Server)
Я знаю, что можно прочитать удаленный файл XML, а затем вставьте его в таблицу базы данных SQL Server. Я нашел один пример, который использует классический ASP и MS Access, но который можно изменить на SQL Server с минимальным кодированием URL: 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 insert, см. URL: http://support.microsoft.com/kb/316005), а также о том, как извлечь некоторую информацию. из XML, но мой запрос нечетный, так как я хочу сначала проверить Country
, а затем получить только Counties Rate
, а не другой, я хочу сделать это для всего XML-файла.
Например, файл XML является чем-то вроде этого:
(или вы можете просмотреть полный файл 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_
всегда будет такой же, только две буквы, изменится и CAN
может стать US
.
Другое дело, если COUNTRY «CAN», то я бы хотел использовать CAN Rate, и если это U.S., я бы хотел использовать US Rate и вставить эту информацию. в базу данных с полем «RATE». (Скорость всегда будет 4 знака после запятой). Тариф, который я хочу, находится только под: <FUEL_TYPE>Special Diesel</FUEL_TYPE>
Мне не нужны другие тарифы.
И последнее, что я хотел бы сделать это, чтобы иметь <QUARTER>2Q2012</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>
Again, Большое вам спасибо за любые советы, ссылки, или любая помощь на всех ...
В интересах других, которые могут копировать технику здесь: не делайте этого. Сосать XML из иностранного источника и конкатенировать его с SQL-кодом, который затем выполняется, является рискованным делом. – AnthonyWJones
@ AnthonyWJones Я согласен, что это очень рискованная вещь, поэтому всегда используйте параметризованный запрос. Для получения дополнительной информации. по параметризованным запросам и хранимым процедурам вы можете прочитать здесь: http://palizine.plynt.com/issues/2006Jun/injection-stored-procedures/ или даже лучше просто искать stackoverflow для параметра Parameterized query – compcobalt