【发布时间】:2012-12-23 11:04:39
【问题描述】:
我有一个像这样的大 (~30Mb) XML 文件:
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<LIC Version="2.0" Title="Products">
<Item>
<Field Name="Filename">/root/_DOWNLOAD/Bird.txt</Field>
<Field Name="Read_By">Lisa Hannigan</Field>
<Field Name="Posit">Passenger</Field>
</Item>
<Item>
<Field Name="Filename">D:\03\Strypers.pdf</Field>
<Field Name="Read_By">Stryper</Field>
<Field Name="Intensity">2</Field>
<Field Name="IMG">78</Field>
<Field Name="Rotate">0</Field>
</Item>
<Item>
<Field Name="Filename">D:\Afriu.txt</Field>
<Field Name="Read_By">Africano</Field>
<Field Name="Posit">Canto Africano vol.1</Field>
<Field Name="File_Resource">mp3</Field>
</Item>
<Item>
<Field Name="Filename">D:\_VARIOUS\Knots.pdf</Field>
<Field Name="Date">40624</Field>
</Item>
...
</LIC>
我想用 php 脚本将此 xml 导入 mysql 数据库。我用过 SIMPLEXML 和 xpath:
$url = 'FILE.xml';
$xml = simplexml_load_file($url);
$result = $xml->xpath("//Field[@Name]");
foreach { ... }
我需要什么?创建用于mysql sql的数组的正确“foreach”是什么? 请注意,每一行(由“项目”标识)都不相同(不具有相同的“字段名称”)。 对较大的文件使用 simplexml 是否正确? 谢谢你的帮助!
更新
这是一个使用“foreach”的例子,我试过了:
$result = $xml->xpath("//Field[@Name]");
foreach($result as $key => $value) {
echo $value['Name']."=".$value.",";
}
现在我想了解如何创建要插入 mysql 的字符串
【问题讨论】:
-
如果你说每个
Item可能有不同的Field.Name,我想你可能需要解释一下你的MySQL表结构... -
您可以使用XPath读取每个项目,然后使用XPath读取每个字段的名称值,即
$item->xpath("Field[@Name='Read_By']"),然后您可以获取该字段的值。 -
@Passerby : mySQL 表是用所有字段创建的!在我的例子中:
CREATE TABLE 'custom' (IDm` int(30) NOT NULL AUTO_INCREMENT,FilenameTEXT,Read_Byvarchar(240),Positvarchar(255),Intensityvarchar(240),IMGTEXT ,Rotatevarchar(240),File_Resourcevarchar(240),Datevarchar(240),`等等..