Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用Xpath过滤XML导出上的搜索?_Php_Xml_Xpath - Fatal编程技术网

Php 如何使用Xpath过滤XML导出上的搜索?

Php 如何使用Xpath过滤XML导出上的搜索?,php,xml,xpath,Php,Xml,Xpath,我目前在一家房地产网站工作。属性的数据通过URL从XML导出中检索。有物业可供出售和出租,但位于两个不同的地理位置。我想做的是两个页面,每个页面对应一个位置,并显示该位置的房屋和公寓,但不包括租金。位置由代理ID(此处为“NEGOCIATEUR_ID”)设置 XML是这样的: <BIEN> <INFO_GENERALES>...</INFO_GENERALES> <AGENCE>...</AGENCE> <NEGOCIATE

我目前在一家房地产网站工作。属性的数据通过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>

...
get_parent_node函数帮助我返回到同一级别的节点以获取信息。但我不能用“NEGOCIATEUR_ID”过滤它


很抱歉,如果我用这么多代码对我的帖子进行了垃圾邮件处理,但是我的PHP技能是基本的,我在这个问题上遇到了麻烦!总而言之:请帮忙!谢谢

您似乎想要获取满足特定条件的
BIEN
元素节点。您应该从一开始就这样做,而不是获取
MAISON
apparement
元素节点:

$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
  );
}
Xpath表达式
  • 获取任何
    BIEN
    元素节点…
    //BIEN
  • …具有
    MAISON
    SS_类型
    等于
    2

    //BIEN[MAISON/SS_TYPE=2]
  • …并且具有
    NEGOCIATEUR
    NEGOCIATEUR\u ID
    等于
    452329

    //BIEN[MAISON/SS_TYPE=2和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\u parent\u节点函数是无用的,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>

所以让我说一声非常感谢

string(6) "452329"
$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]');
  <?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>