0

我想将大型 xml 文件中的一些项目导入 mysql 表。假设 xml 包含数千个项目,例如:

<CD>
<TITLE>Empire Burlesque</TITLE>
<ARTIST>Bob Dylan</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Columbia</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1985</YEAR>
</CD>

但我只需要将每张 CD 的“TITLE”和“YEAR”导入 mysql 的 cd 表。

我知道有一个'LOAD XML' mysql 5.+ 可以将数据从 xml 获取到 mysql,但显然它映射了整个 xml,这不是我需要的。所以我很感谢你的帮助。

4

3 回答 3

3

使用SimpleXML加载 XML,然后循环遍历这些值。我的示例使用simplexml_load_string()您可以轻松使用simple_load_file()

例子

$string = <<<XML
<?xml version='1.0'?> 
<CDS>
<CD>
<TITLE>Empire Burlesque</TITLE>
<ARTIST>Bob Dylan</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Columbia</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1985</YEAR>
</CD>
<CD>
<TITLE>Empire Burlesque2</TITLE>
<ARTIST>Bob Dylan</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Columbia</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1986</YEAR>
</CD>
</CDS>
XML;

$xml = simplexml_load_string($string);

foreach ($xml as $cd) 
{
    // Your mysql functions for inserting goes here
    echo $cd->TITLE . "<br>";
    echo $cd->YEAR . "<br>";
}

看到它在行动

希望这可以为您指明正确的方向。

于 2013-02-22T18:57:56.237 回答
2

所以你可以用这种方法来完成工作:


  • 使用 XSLT 转换将包含所有元素的大型 XML 文件转换为仅包含所需元素的较小 XML 文件
  • 比使用 XML 解析器如 SAXON、DOM 或其他解析新的小 XML 文件
  • 使用一些编程语言来为您完成解析和数据库转储部分。
    例如,如果您打算使用 java,则可以使用称为 JAXB 的概念将 XML 解组为 java 对象,然后将它们填充到数据库中。

如果您可以分享有关您的原始 XML 的更多信息以及您希望从中获得哪些元素,我可以为您在 JAVA 中发布解决方案。

希望这会帮助你。

于 2013-02-22T19:08:37.173 回答
2

感谢abase omment,我刚刚发现将必要字段从xml导入mysql表的最简单方法是使用mysql内置的Load XML功能,例如:

 LOAD XML LOCAL INFILE '/path/to/file.xml' INTO TABLE  cds ROWS IDENTIFIED BY '<CD>';

您之前通过 file.xml 中需要的列创建 cds 表的位置。

请注意,在 mysql 5.5+ 中,您需要在输入 mysql 命令行时添加“--local-infile”标志,否则会收到 ERROR 1148。

于 2013-02-26T02:18:15.810 回答