使用 xpath 筛选 php simple_xml 加载结果
Filter php simple_xml load results with xpath
我需要一些帮助来找出 XML 中的 XPath 搜索输出 simple_xml_load in PHP。我有这个 XML:
<PRODUCTS>
<PRODUCT>
<CODE>5009444</CODE>
<NAME>Prova</NAME>
<IMG>prova.jpg</IMG>
</PRODUCT>
....
....
</PRODUCTS>
我想过滤并遍历此数据以查找并 return 所有出现的变量代码。
我使用了这个语法但是没有用
$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() 只支持这种结果,它总是 return 一个 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;
我需要一些帮助来找出 XML 中的 XPath 搜索输出 simple_xml_load in PHP。我有这个 XML:
<PRODUCTS>
<PRODUCT>
<CODE>5009444</CODE>
<NAME>Prova</NAME>
<IMG>prova.jpg</IMG>
</PRODUCT>
....
....
</PRODUCTS>
我想过滤并遍历此数据以查找并 return 所有出现的变量代码。 我使用了这个语法但是没有用
$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() 只支持这种结果,它总是 return 一个 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;