[英]How can I filter a search on a XML export with Xpath?
我目前在房地产网站上工作。 通过URL从XML导出中检索属性的数据。 有出售和出租的物业,但位于两个不同的地理位置。 我想做的是两个页面,每个页面对应一个位置并显示该位置的房屋和公寓,但没有租金。 该位置由经纪人ID(此处为“ NEGOCIATEUR_ID”)设置。
XML是这样的:
<BIEN>
<INFO_GENERALES>...</INFO_GENERALES>
<AGENCE>...</AGENCE>
<NEGOCIATEUR>
<NEGOCIATEUR_ID>452329</NEGOCIATEUR_ID>
</NEGOCIATEUR>
<VENTE>...</VENTE>
<MAISON>...</MAISON>
<LOCALISATION>...</LOCALISATION>
</BIEN>
这是我当前的PHP代码:
<?php
class noeud_parent extends SimpleXMLElement
{
public function get_parent_node()
{
// return current($this->xpath('//BIEN/* | //BIEN/NEGOCIATEUR[NEGOCIATEUR_ID=436344] | not //BIEN/LOCATION'));
return current($this->xpath('parent::*'));
}
}
$url = 'http://clients.ac3-distribution.com/office5/ageprim/cache/export.xml';
$xml = simplexml_load_file($url, 'noeud_parent');
$maisons = $xml->xpath('//BIEN/MAISON[SS_TYPE=2]');
$appartements = $xml->xpath('//BIEN/APPARTEMENT[SS_TYPE=1]');
?>
public function中的注释行是我想要的结果(当然,它不是这样工作的:/)。 而且我什至没有排除租金(如果是租金,则由<LOCATION>
代替)...甚至可以在一行中全部完成吗?
这是HTML:
<?php foreach ($maisons as $bien): ?>
<article class="bien">
<div class="photo_bien"><img src="<?= $bien->get_parent_node()->IMAGES->IMG[0] ?>"/></div>
<h4><?= $bien->get_parent_node()->LOCALISATION->VILLE ?></h4>
<p><?= $bien->get_parent_node()->INTITULE->FR ?></p>
<p><strong>Nbre de pièces :</strong> <?= $bien->get_parent_node()->MAISON->NBRE_PIECES ?></p>
<a href="annonce.php?aff_id=<?= $bien->get_parent_node()->INFO_GENERALES->AFF_ID ?>">VOIR PLUS</a>
</article>
<?php endforeach ?>
get_parent_node函数可帮助我向后退以从相同级别的节点获取信息。 但是我无法使用“ NEGOCIATEUR_ID”对其进行过滤...
抱歉,如果我向我的帖子发送了这么多代码,但我的PHP技能是基础知识,我就此问题为难! 总结一下:请帮忙! 谢谢!
看来您想获取满足特定条件的BIEN
元素节点。 您应该从头开始,不要获取MAISON
或APPARTEMENT
元素节点:
$xml = <<<'XML'
<BIEN>
<INFO_GENERALES>...</INFO_GENERALES>
<AGENCE>...</AGENCE>
<NEGOCIATEUR>
<NEGOCIATEUR_ID>452329</NEGOCIATEUR_ID>
</NEGOCIATEUR>
<VENTE>...</VENTE>
<MAISON>
<SS_TYPE>2</SS_TYPE>
</MAISON>
<LOCALISATION>...</LOCALISATION>
</BIEN>
XML;
$xml = simplexml_load_string($xml);
foreach ($xml->xpath('//BIEN[MAISON/SS_TYPE=2 and NEGOCIATEUR/NEGOCIATEUR_ID = 452329]') as $bien) {
var_dump(
(string)$bien->NEGOCIATEUR->NEGOCIATEUR_ID
);
}
输出:
string(6) "452329"
Xpath表达式
BIEN
元素节点... //BIEN
MAISON
与SS_TYPE
等于2
... //BIEN[MAISON/SS_TYPE=2]
NEGOCIATEUR
和NEGOCIATEUR_ID
等于452329
... //BIEN[MAISON/SS_TYPE=2 and NEGOCIATEUR/NEGOCIATEUR_ID = 452329]
是的,它有效!! 我曾尝试使用'and'进行此类指令,但语法错误! 它是这样的:
$maisons = $xml->xpath('//BIEN[MAISON/SS_TYPE=2 and NEGOCIATEUR/NEGOCIATEUR_ID = 452329]');
$appartements = $xml->xpath('//BIEN[APPARTEMENT/SS_TYPE=1 and NEGOCIATEUR/NEGOCIATEUR_ID = 452329]');
我试图用xquery和Zorba找到我的答案,但是考虑到我的问题,它会变得非常复杂:| ...
通过您的解决方案,我的get_parent_node函数没有用,HTML看起来像这样:
<?php foreach ($maisons as $bien): ?>
<article class="bien">
<div class="photo_bien"><img src="<?= $bien->IMAGES->IMG[0] ?>"/></div>
<h4><?= $bien->LOCALISATION->VILLE ?></h4>
<p><strong>Prix :</strong> <?= $bien->VENTE->PRIX ?> euros</p>
<p><strong>Agence :</strong> <?= $bien->AGENCE->AGENCE_VILLE ?></p>
<a href="annonce.php?aff_id=<?= $bien->INFO_GENERALES->AFF_ID ?>">VOIR PLUS</a>
</article>
所以,我要非常感谢您!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.