簡體   English   中英

用xpath過濾php simple_xml加載結果

[英]Filter php simple_xml load results with xpath

我需要一點幫助來弄清楚PHP中XML輸出simple_xml_load中的XPath搜索。 我有這個XML:

<PRODUCTS>
  <PRODUCT>
    <CODE>5009444</CODE>
    <NAME>Prova</NAME>
    <IMG>prova.jpg</IMG>
  </PRODUCT>
  ....
  ....
</PRODUCTS>

我想過濾並遍歷此數據以查找並返回帶有可變代碼的所有事件。 我使用了這種語法,但是沒有用

$id = 1;
$struct = \App\Models\Structures::where('id', $id)->first();
$url = 'http://demo.villaggissimi.it/public/xml/CMP_' . $struct->operators->pk .'.xml';
$xc = simplexml_load_file($url) or die("Non sono stati trovati risultati");
$xml2 = $xc->xpath("/PRODUCTS/PRODUCT[CODE='$struct->code']");
return response()->json($xml2);

Xpath表達式的結果是一個節點列表,SimpleXMLElement:xpath()僅支持這種結果,它將始終返回一個SimpleXMLElement對象數組(用於有效的Xpath表達式)。

因此,如果未找到任何元素,您仍然必須使用foreach()/if()以避免出現錯誤消息。

但是,您可以將結果限制為僅包含一個節點的列表。

foreach ($xc->xpath("/PRODUCTS/PRODUCT[CODE='$struct->code'][1]") as $productNode) {
  return response()->json($productNode);
}
return FALSE;

$productNodes = $xc->xpath("/PRODUCTS/PRODUCT[CODE='$struct->code'][1]");
if (count($productNodes) > 0) {
  return response()->json($productNodes[0]);
}
return FALSE;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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