选择要从XML导入到mySQL表的数据

时间:2015-04-27 07:06:07

标签: php mysql sql xml

我需要将一个非常大的XML文件导入到我的MySQL表中。问题是我需要选择输入什么数据。例如,XML是这样的:

<FLIGHT>
<Airline>SAS</Airline>
<FlightNumber>1</FlightNumber>
<CommercialFlightNumber>SK1</CommercialFlightNumber>
<From>LLA</From>
<To>ARN</To>
<PreparedAt>2015/01/30 00:00</PreparedAt>
<Aircraft>LN-RGI</Aircraft>
<AircraftType>0</AircraftType>
<ClimbMode>1</ClimbMode>
<CruiseMode>100600</CruiseMode>
<DescentMode>1</DescentMode>
<InitAlt>MAX</InitAlt>
<StepClimb>-1</StepClimb>
<MTOW>-1</MTOW>
<MLW>-1</MLW>
<STD>2015/1/19 06:00</STD>
<STA>2015/1/19 07:30</STA>
<MaxPax>0</MaxPax>
<MaxCargo>0</MaxCargo>
<RandomPayload>0</RandomPayload>
<Type>0</Type>
<Repetative>1</Repetative>
<IsMaster>1</IsMaster>
<BeginDate>2015/02/04 00:00</BeginDate>
<EndDate>2015/04/30 23:59</EndDate>
<Days>1</Days>
<Baggage>-1</Baggage>
<Payload>-1</Payload>
<Notes>7388</Notes>
</FLIGHT>

但我只需要“CommercialFlightNumber”,“From”,“To”,“Aircraft”和“Days”。我查看了this的答案,并试图将我的信息放在一个php文件中,但文件变大了,程序崩溃了..反正这样做了吗?谢谢!

2 个答案:

答案 0 :(得分:1)

查看SQL Server的nodes()

  

如果要将xml数据类型实例分解为关系数据,则nodes()方法很有用。它允许您识别将映射到新行的节点。 [MSDN]

仅将特定XML元素插入表中的示例:

declare @table TABLE(CommFlightNo varchar(10), 
                     [From] varchar(3), [To] varchar(3), 
                     Aircraft varchar(10), Days int)
declare @xml xml = '...xml posted in question....'


INSERT INTO @table
SELECT F.x.value('CommercialFlightNumber[1]', 'varchar(10)') as 'ComFlightNo'
      ,F.x.value('From[1]', 'varchar(3)') as 'From'
      ,F.x.value('To[1]', 'varchar(3)') as 'To'
      ,F.x.value('Aircraft[1]', 'varchar(10)') as 'Aircraft'
      ,F.x.value('Days[1]', 'int') as 'Days'
FROM @xml.nodes('//FLIGHT') as F(x)

<强> SQL Fiddle

答案 1 :(得分:0)

我是通过将整个XML文件插入带有代码

的表中来实现的
 LOAD XML LOCAL INFILE '/path/to/file.xml' INTO MY_TABLE

然后我删除了我不需要的列。