1

在 PHP 中,解析格式如下的 XML 文档的最快、最有效的方法是什么:

<data>
    <rowdata>
        <fieldname>products_id</fieldname>
        <value><![CDATA[1]]></value>
        <fieldname>products_image</fieldname>
        <value><![CDATA[image_one.jpg]]></value>
        <fieldname>products_name</fieldname>
        <value>Product One</value>
    </rowdata>
    <rowdata>
        <fieldname>products_id</fieldname>
        <value><![CDATA[2]]></value>
        <fieldname>products_image</fieldname>
        <value><![CDATA[image_two.jpg]]></value>
        <fieldname>products_name</fieldname>
        <value>Product Two</value>
    </rowdata>
</data>

这是我被一家系统公司提供的将产品导入数据库的格式。我不知道他们为什么决定拥有<fieldname><value>标签,而不仅仅是<products_id>1</products_id>

目前我能想到的唯一方法是编写一些粗略的循环,每次<value>找到标签并重置时都会设置一个布尔值

4

1 回答 1

1

看起来很简单。有一些逻辑 - 每个<fieldname>都有<value>- 我假设每个字段名对应于表中的一列。

使用simplexml

$xml='<data>
    <rowdata>
        <fieldname>products_id</fieldname>
        <value><![CDATA[1]]></value>
        <fieldname>products_image</fieldname>
        <value><![CDATA[image_one.jpg]]></value>
        <fieldname>products_name</fieldname>
        <value>Product One</value>
    </rowdata>
    <rowdata>
        <fieldname>products_id</fieldname>
        <value><![CDATA[2]]></value>
        <fieldname>products_image</fieldname>
        <value><![CDATA[image_two.jpg]]></value>
        <fieldname>products_name</fieldname>
        <value>Product Two</value>
    </rowdata>
</data>';

$data = simplexml_load_string($xml);
$baseSQL='INSERT into TABLE set ';

foreach($data as $rowdata) {
    $SQL='';
    $count=0;
    foreach ($rowdata->fieldname as $fieldname) {
        if ($SQL!='') $SQL.=',';
        $SQL.=$fieldname.'="'.$rowdata->value[$count].'"';
        $count++;
    }
    echo $baseSQL.$SQL.'<br>';
}

产生:

INSERT into TABLE set products_id="1",products_image="image_one.jpg",products_name="Product One"
INSERT into TABLE set products_id="2",products_image="image_two.jpg",products_name="Product Two"
于 2013-08-15T14:19:16.873 回答