gpt4 book ai didi

PHP 解析具有不一致对象的 XML 提要

转载 作者:行者123 更新时间:2023-11-30 23:03:30 24 4
gpt4 key购买 nike

我需要将外部 XML 提要处理到我的 Mysql 数据库中。 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

如您所见,第一个节点有一个名为“HuisnummerToevoeging”的额外元素。

我使用 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 提要中不存在的元素?我必须为每个房地产对象处理总共 70 个字段,有些只使用 10 个字段。此外,XML 提要可以使用额外的字段进行更新,恕不另行通知,因此我需要以巧妙的方式处理这个问题。

最佳答案

我想出了另一种解决问题的方法。

我创建了一个变量数组和值的 xpaths:

$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";
}
}

关于PHP 解析具有不一致对象的 XML 提要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22879117/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com