簡體   English   中英

如何使用Xpath過濾XML導出的搜索?

[英]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元素節點。 您應該從頭開始,不要獲取MAISONAPPARTEMENT元素節點:

$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
  • ...的MAISONSS_TYPE等於2 ...
    //BIEN[MAISON/SS_TYPE=2]
  • ...並且具有NEGOCIATEURNEGOCIATEUR_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM