【发布时间】:2011-12-18 02:29:56
【问题描述】:
我第一次尝试使用 LOAD XML,并且大部分都得到了我想要的结果,因为大部分 XML 数据被传输到数据库表和它们各自的列中,但是有两列是没有正确导入。
让我展示一个典型 XML 结构的示例,以便您了解原因(这显然只是文件中的一条记录)。
注意: XML 结构无法更改,这是从我无法控制的文件中读取的,因此我必须按原样使用该结构。
<trait name="ArmorBldg_R001">
<dbid>450</dbid>
<traittype>ArmorBuilding</traittype>
<rarity>rare</rarity>
<icon>UserInterface\Icons\Equipment\ArmBuildR3_ua</icon>
<rollovertextid>53253</rollovertextid>
<displaynameid>53254</displaynameid>
<offertype>eOfferCivMatching</offertype>
<visualfactor type="Body" factor="2.0000"/>
<sellable>1</sellable>
<tradeable>1</tradeable>
<destroyable>1</destroyable>
<effects>
<effect type="Data" bonus="true" amount="1.0122" scaling="0.0031" subtype="Armor" visible="true" damagetype="Ranged" relativity="Percent">
<target type="Player"/>
</effect>
<effect type="Data" bonus="true" amount="1.0197" scaling="0.0052" subtype="Damage" visible="true" allactions="1" relativity="Percent">
<target type="Player"/>
</effect>
<effect type="Data" bonus="true" amount="1.0092" scaling="0.0023" subtype="LOS" visible="true" relativity="Percent">
<target type="Player"/>
</effect>
</effects>
</trait>
我正在使用..导入。
LOAD XML LOCAL INFILE 'C:\path\to\xmlfile\example.xml'
INTO TABLE mytable
ROWS IDENTIFIED BY '<trait>';
这是表结构。
CREATE TABLE `traits` (
`name` varchar(40) NOT NULL,
`dbid` smallint(5) unsigned NOT NULL,
`traittype` varchar(40) NOT NULL,
`rarity` varchar(10) NOT NULL,
`icon` varchar(100) NOT NULL,
`rollovertextid` mediumint(8) unsigned NOT NULL,
`displaynameid` mediumint(8) unsigned NOT NULL,
`offertype` varchar(20) NOT NULL,
`visualfactor` text NOT NULL,
`sellable` tinyint(1) NOT NULL,
`tradeable` tinyint(1) NOT NULL,
`destroyable` tinyint(1) NOT NULL,
`effects` text NOT NULL,
UNIQUE KEY `dbid` (`dbid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
所有记录都正确导入,但每条记录的 visualfactor 和 effects 列都为空。
我一直在阅读以下两页..
http://dev.mysql.com/doc/refman/5.5/en/load-xml.html
http://dev.mysql.com/doc/refman/5.5/en/load-data.html
..但不幸的是,我什至对从哪里开始感到困惑(那些文档真的很少解释自己),任何人都可以提供一些指示吗?即使它只是一个包含合适(且易于理解)示例的网页。
提前感谢任何可以提供指导的人。
【问题讨论】: