1

我有一个动态产品 xml 文件,我需要从外部源加载并保存在 db 表中。现在我想保持包含当前产品的 xml 文件与表中的内容同步。所以我想确保我用 xml 和 db 表中的 ID 更新产品,插入新产品并删除那些在 db 表中过时的产品(它们不在 xml 文件中)请参阅
XML 文件映射 下面的插图

Productid->1 and product-name->book,
Productid->2 and Prouct-name->pen

现在下表

ID 姓名
1 本书
3 铅笔

现在我想用 xml 中的信息更新产品 ID 1,将 xml 中的产品 ID 2 插入表中,并从表中删除产品 ID 3,因为它在 xml 中找不到

请任何帮助表示赞赏。

4

1 回答 1

2

由于您已经拥有所需流程的流程图,因此应该非常简单。

我没有进行任何数据清理/转义,因为您可以根据自己的要求进行操作。

XML FILE: (save it as testFeed.xml)

<?xml version="1.0" encoding="UTF-8"?>
<products>
    <product>
        <id>1</id>
        <name>book</name>
    </product>
    <product>
        <id>2</id>
        <name>pen</name>
    </product>
</products>

PHP Code:

<?php
$xml = simplexml_load_file( 'testFeed.xml' );
$xpath = $xml->xpath( '//product' );

$feed = array();
foreach( $xpath as $node ) {
    $feed[(string)$node->id] = (string)$node->name;  // id is key, name is value
}

// delete all entries from table where the table entries are not in the xml
$sql = 'DELETE FROM `table` WHERE id NOT IN 
          (' . implode( ',', array_keys( $feed ) ) . ')';
$run = mysql_query( $sql, $link );

//Now, insert/update - USE MySQL's "INSERT ... ON DUPLICATE UPDATE" feature
foreach( $xpath as $key => $node ) {
    $sql = 'INSERT INTO `table` (id,name) VALUES ("'.$key.'","'.$node.'") 
              ON DUPLICATE KEY UPDATE name="'.$node.'";'
    $run = mysql_query( $sql, $link );
}
?>

MySQL INSERT ... ON DUPLICATE UPDATE示例在这里。

希望这可以帮助。

于 2012-06-22T06:17:43.953 回答