вход XML
:
$url = '<?xml version="1.0" encoding="utf-8"?>
<all_emp>
<emp_detail>
<emp emp_name="john"><img>john_1.jpg</img></emp>
<emp emp_name="john"><img>john_2.jpg</img></emp>
<emp emp_name="john"><img>john_3.jpg</img></emp>
<emp emp_name="jo"><img>jo_1.jpg</img></emp>
<emp emp_name="jo"><img>jo_2.jpg</img></emp>
<emp emp_name="david"><img>david_1.jpg</img></emp>
</emp_detail>
</all_emp>';
$xml = simplexml_load_string($url) or die("Error: Cannot create object");
$imgstring ='';
foreach ($xml->emp_detail->emp as $node ) {
if (strpos((string) $node->attributes()->emp_name, "jo") !== false) {
$imgstring .= (string) $node->img . "<br />";
}
}
echo ($imgstring);
Текущий результат:
john_1.jpg
john_2.jpg
john_3.jpg
jo_1.jpg
jo_2.jpg
Но я хочу получить только IMG с атрибутом «Джо», как,
Ожидаемое:
jo_1.jpg
jo_2.jpg
Как это сделать?
Вы делаете одну вещь неправильно здесь strpos
это проверить положение substring
а также jo
также подстрока john
вот почему вы получаете все значения Вместо этого вы можете просто использовать ==
для сравнения.
Попробуйте этот фрагмент кода здесь
Измените это на:
if (strpos((string) $node->attributes()->emp_name, "jo") !== false) {
Это:
if ($node->attributes()->emp_name== "jo") {
Может быть, просто использовать сравнение
if ( $node->attributes()->emp_name == "jo" )
strpos () возвращает позицию подстроки, и это дает вам целое число, а целое число не равно false. strpos () возвращает false, только если не находит подстроку в строке (emp_name = «david» в вашем случае).
Используйте Xpath. Это позволяет вам использовать выражения для выбора частей DOM.
$xml = simplexml_load_string($url) or die("Error: Cannot create object");
foreach($xml->xpath('/all_emp/emp_detail/emp[@emp_name="jo"]') as $emp) {
//...
}