我有一个XML文件,我想以规范化的方式解析到数据库中。表二是我创建一对多关系表的想法。名称,标题永远不会为每个文件组更改,但下载路径将不同。
表1
id | name | title | download_path
----------------------------------------------------------------------
1 | FileGroup 1 | This is the first file group | /this/1/1.zip
2 | FileGroup 1 | This is the first file group | /this/1/2.zip
3 | FileGroup 2 | This is the second file group | /this/2/1.zip
4 | FileGroup 2 | This is the second file group | /this/2/2.zip
5 | FileGroup 3 | This is the third file group | /this/3/1.zip
XML文件
<Item>
<Name>File Group 1</Name>
<Title>This is the first file group</Title>
<DownloadPath>/this/1/1.zip</DownloadPath>
</Item>
<Item>
<Name>File Group 1</Name>
<Title>This is the first file group</Title>
<DownloadPath>/this/1/2.zip</DownloadPath>
</Item>
<Item>
<Name>File Group 2</Name>
<Title>This is the second file group</Title>
<DownloadPath>/this/2/1.zip</DownloadPath>
</Item>
<Item>
<Name>File Group 2</Name>
<Title>This is the second file group</Title>
<DownloadPath>/this/2/2.zip</DownloadPath>
</Item>
<Item>
<Name>File Group 3</Name>
<Title>This is the third file group</Title>
<DownloadPath>/this/3/1.zip</DownloadPath>
</Item>
表2
group_id | file_id
-----------------------------
1 | 1
1 | 2
2 | 3
2 | 4
3 | 5
在解析XML时,最好的方法是什么?如果我将XML数据放入一个数组并通过每个项目进行预测,我需要能够动态地对它们进行分组并在表2中创建关系。我确实想到只创建表1然后构建关系表,但即便如此,我也不知道如何最好地将它们分组。我在XML中没有任何内容可以说它们与其他名称和标题分组。每个组可以有任意数量的文件下载路径。
我对XML文件创建没有任何发言权。我只需要处理它。
答案 0 :(得分:0)
您的表格结构未规范化。您可以更新一个FileGroup / Title行而不更新另一个,这是错误的。相反,FileGroup / Title应该在一个表中,FileGroup / download_path应该在另一个表中。
至于基于xml组织数据库,假设您正在按节点解析xml:
$groups = array();
foreach ($Items as $Item) {
if (!isset($groups[$Item->Name])) {
$groups[$Item->Name] = array(
'title' => $Item->Title
, 'files' => array();
);
}
$groups[$Item->Name]['files'][] = $Item->DownloadPath;
}
你的例子中的xml也是无效的,所以如果真的如此,那么运气好吧。