在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>
标记时都会设置一个布尔值并重置
答案 0 :(得分: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"