相应地映射XML

时间:2017-04-25 10:19:22

标签: php xml mapping

我无法找到解决我遇到的问题的解决方案,解析XML。 让我来描述一下我现在所拥有的以及问题所在:

我有XML文件的链接,例如:

<prodcuts>
..
<product>
<id>1</id>
<name><![CDATA[ this is a test product name ]]></name>
<link><![CDATA[http://www.google.com]]></link>
<image><![CDATA[http://www.google.com/image.jpg]]></image>
<sku><![CDATA[ ]]></sku>
<category><![CDATA[ System > Technology ]]></category>
<price>20</price>
<description><![CDATA[ ]]></description>
<instock><![CDATA[ Y ]]></instock>
<availability>Y</availability>
</product>
..
</products>

另一个XML有:

<prodcuts>
    ..
<product>
<productID>1</productID>
<title><![CDATA[  ]]></title>
<link><![CDATA[http://www.google.com]]></link>
<image><![CDATA[http://www.google.com/image.jpg]]></image>
<sku><![CDATA[ ]]></sku>
<categoryPath><![CDATA[ System > Technology ]]></categoryPath>
<price>20</price>
<description><![CDATA[ ]]></description>
<instock><![CDATA[ Y ]]></instock>
<availability>Y</availability>
<size>40</size>
</product>
..
</products>

现在,它们之间的区别是

1)第一个标签名称为“name”,另一个标签名称为“title”。 2)第二个有一些标签,第一个没有。

现在的问题是,我正在通过PHP解析XML文件,如下所示:

$xml->products->product[$i]->id
$xml->products->product[$i]->name

等等..如果我这样做,我写的代码将只适用于第一个。缺少的标签现在不是问题,因为我插入数据库NULL因为没有必需的字段..

但是,第二个XML怎么样?我可以“自动”做一些事情,以避免要求更正这些标签吗? 这只能手动完成,抓住这个LINK的内容(通过PHP)并重命名那些?

我没有来自客户的文件,只有XML的LINK。

提前感谢!

1 个答案:

答案 0 :(得分:0)

OK!我相信我已经找到了解决问题的方法..我在这里写了一些以防有人遇到同样的问题:

解决方案:

i)读取XML文件的所有子项,无论它们是如何编写的(区分大小写)并将它们添加到数据库中。之后,有一个带有SQL查询的仪表板/ PHP文件,它将那些子元素XML元素标记与您想要的元素匹配。         在这种情况下,您可能希望创建一个名为的文件,例如test.xml,并使用正确的XML标记元素创建所需的文件。在这种情况下,您可以通过cronjob每隔一小时更新一次(根据您的需要)..

ii)为每个获得的XML手动创建内部解析的PHP文件。只需确保在数据库中保留XML链接

iii)要求客户端为您提供正确的XML。 XML之所以区分大小写是有原因的。

如果你选择了第一个解决方案,你需要对php.ini文件进行更改,导致XML文件可能太大而且max_execution_time可能太低而无法运行所有这些PHP - MySQL脚本。

如果有人需要更多解释或有更好的建议,请分享!