我需要将外部XML Feed处理到我的Mysql DB中。 XML提要包含房地产对象。问题是节点中的字段数不一致。某些节点(房地产对象)有额外的字段或缺少某些字段。
以下是2个房地产对象的一部分:
<Object>
<ObjectCode>CM10272</ObjectCode>
<ObjectDetails>
<Adres>
<Nederlands>
<Straatnaam>Dokter van Nieveltweg</Straatnaam>
<Huisnummer>0</Huisnummer>
**<HuisnummerToevoeging>ong</HuisnummerToevoeging>**
<Postcode>1901 GD</Postcode>
<Woonplaats>CASTRICUM</Woonplaats>
<Land>NL</Land>
</Nederlands>
</Adres>
etc
<Object>
<ObjectCode>CM10280</ObjectCode>
<ObjectDetails>
<Adres>
<Nederlands>
<Straatnaam>De Houtwal</Straatnaam>
<Huisnummer>44</Huisnummer>
<Postcode>1852 RP</Postcode>
<Woonplaats>HEILOO</Woonplaats>
<Land>NL</Land>
</Nederlands>
</Adres>
etc
正如您所看到的,第一个节点有一个名为&#34; HuisnummerToevoeging&#34;的额外元素。
我使用XPATH处理xml提要:
$values = <<<XPATH
(
ObjectCode
|ObjectDetails/Adres/Nederlands/Straatnaam
|ObjectDetails/Adres/Nederlands/Huisnummer
|ObjectDetails/Adres/Nederlands/HuisnummerToevoeging
|ObjectDetails/Adres/Nederlands/Postcode
|ObjectDetails/Adres/Nederlands/Woonplaats
)
XPATH;
$pattern = <<<SQL
INSERT INTO woningen
(
ObjectCode, Straat, Huisnr, Huistoe, Postcode, Woonplaats, PrijsVoorvoegsel, Prijs, PrijsCondiditie
)
VALUES
(
'%s','%s', '%d', '%s', '%s', '%s', '%s', '%d', '%s'
)
SQL;
foreach ($woning as $woning)
{
$data = $woning->xpath($values);
$escaped = array_map('mysql_real_escape_string', $data);
$query = vsprintf($pattern, $escaped);
//INSERT INTO MYSQL
}
如何跳过XML Feed中不存在的元素?我必须为每个房地产对象总共处理70个字段,有些仅使用10个字段。此外,XML feed可以使用额外的字段进行更新,恕不另行通知,因此我需要以智能方式处理它。
答案 0 :(得分:0)
我找到了解决问题的另一种方法。
我创建了一个变量和xpath数组到值:
$NeedData = array( "ObjectCode"=>"ObjectCode",
"Straat"=>"ObjectDetails/Adres/Nederlands/Straatnaam",
"Huisnr"=>"ObjectDetails/Adres/Nederlands/Huisnummer",
"Huistoe"=>"ObjectDetails/Adres/Nederlands/HuisnummerToevoeging",
"Postcode"=>"ObjectDetails/Adres/Nederlands/Postcode",
"Woonplaats"=>"ObjectDetails/Adres/Nederlands/Woonplaats",
etc
然后使用一个小的foreach循环我检查一个元素是否存在XML对象,如果没有,那么我将值设置为“null”
foreach ($XML_woning as $woning){
foreach($NeedData as $key=>$value){
$val = $woning->xpath($value);
if($value!=""){
if(isset($val[0])){
$$key = $val[0];
}else{
$$key="null";
}
}else{
$$key="null";
}
}