PHP / MySQL处理XML数组,其属性每行更改

时间:2013-10-25 00:00:36

标签: php mysql xml data-structures transpose

我正在使用eBay Trading API,其中一个API调用部分带有一个ItemSpecifics XML元素数组,下面是一个简单的例子:

<ItemSpecifics>
<NameValueList>
    <Name>Brand</Name>
    <Value>My1stWish</Value>
    <Source>ItemSpecific</Source>
</NameValueList>
</ItemSpecifics>

因此我们返回了名称属性。

并非所有商品都使用相同的名称属性,一些eBay商品可能没有,有些可能有20个,而这20个与下一个商品完全不同,有15个不同。< / p>

所以我的问题是: 您如何建议处理这些属性值,以便它们可以存储到MySQL数据库表中,然后可以从该表中撤回,并使用右侧名称作为标题和相应的

我是否应该将这些作为序列化数据转储到名为&#39; ItemSpecifics&#39;?的列的表中但后来我不确定如何让它们再次退出,以便我可以创建一个平面文件,其中所有选项都作为标题说明为CSV文件。

以下两个例子:

清单1返回:

<ItemSpecifics>
<NameValueList>
    <Name>Brand</Name>
    <Value>My1stWish</Value>
    <Source>ItemSpecific</Source>
</NameValueList>
<NameValueList>
    <Name>Exact Colour</Name>
    <Value>Black</Value>
    <Source>ItemSpecific</Source>
</NameValueList>
</ItemSpecifics>

清单2返回:

<ItemSpecifics>
<NameValueList>
    <Name>Exact Heel Height</Name>
    <Value>4.1"</Value>
    <Source>ItemSpecific</Source>
</NameValueList>
<NameValueList>
    <Name>Heel Type</Name>
    <Value>Stiletto</Value>
    <Source>ItemSpecific</Source>
</NameValueList>
</ItemSpecifics>

1 个答案:

答案 0 :(得分:0)

我能想到的有两种方法可以做到这一点。首先,正如您所提到的那样,有序列化。您可以将数据转储到数组中,通过serialize运行并将其与其他数据放在同一行。

然而,第二种方式可能更好。也就是说,您创建一个与您的项目相关的表格。我们假设您有一张名为items的表格。在其中,您创建一个名为item_id的自动ID(自动增量)字段。因此,您将项目数据拉出并将其放入此表中。我们会说它的ID为20.现在,您有第二个名为item_options的表。在此表中,您将逐行存储选项。您还可以输入父行的ID。所以,让我们说你有5套选择。您将有五行,每行有item_id 20个。此处的优势在于您的数据现在已完全展开,因此您可以查询选项表以查找提供红色的所有产品。这是&#34;关系数据库&#34; RDBMS的一部分。