感谢您对此提供的帮助。我有一个非常长的xml表单,其中有80多个项目要插入到我的数据库中。
我已经对此进行了研究,由于某种原因,我的foreach循环无法正常工作。
我在此处减少了插入内容,以使我对我想做的事情有所了解。
我可以将第一个“属性/项目”插入数据库,所以我知道插入没有问题。
由于某种原因,循环不会在数据库中显示其他79个项目。
$affectedRow = 0;
$xml = simplexml_load_file('properties2.xml') or die("can not find it");
foreach($xml->children() as $row) {
$reference = $row->branch->properties->property['reference'];
$instructedDate = $row->branch->properties->property->instructedDate;
$price_text = $row->branch->properties->property->price_text;
$sql = "INSERT INTO test( reference, instructedDate, price_text) VALUES ('". $reference ."','". $instructedDate ."','". $price_text ."')";
$result = mysqli_query($conn, $sql);
if (! empty($result )) {
$affectedRow ++;
} else {
$error_message = mysqli_error($conn) . "\n";
}
}
?>
例如xml文件
-<agency branchName="billies Estate Agents " name="billie ea" xsi:noNamespaceSchemaLocation="http://www.feedcompany.co.uk/xmlexport/feedcompanyXMLSchema.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-<branches>
-<branch name="billies Estate Agents ">
-<properties>
-<property reference="00000477">
<instructedDate>26/02/2018 15:11:56</instructedDate>
<price_text>Offers in Excess of £200,000</price_text>
</property
-<property reference="00000478">
<instructedDate>26/02/2018 15:11:56</instructedDate>
<price_text>Offers in Excess of £200,000</price_text>
</property>
答案 0 :(得分:1)
您只会将第一个元素放入数据库,因为$xml->children()
不是您所期望的。
请注意,您的XML以<agency>
开头,之后带有<branches>
标记。我想您的完整XML是这样的:
<agency>
<branches>
<branch>
<properties>
<property>
...
</property>
<property>
...
</property>
</properties>
</branch>
</branches>
</agency>
您要获取所有属性->,因此需要使用$xml->branches->branch->properties->children()
。
类似:
foreach($xml->branches->branch->properties->children() as $property) {
$sql = "INSERT INTO test( reference, instructedDate, price_text) VALUES ('". $property['reference']."','". $property->instructedDate ."','". $property->price_text."')";
...
}
当您在第三行执行$xml->children()
时,您将把branchs标签作为数组中的唯一元素-这就是为什么只有一个元素插入数据库的原因。