在PHP中解析非标准XML文档的最有效方法


Most efficient method of parsing non-standard XML document in PHP

在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>标签时都会设置一个布尔值,并重置

看起来很简单。有一些逻辑-每个<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"