输入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”之类的,
预期:
jo_1.jpg
jo_2.jpg
怎么做?
答案 0 :(得分:0)
你在这里做错了一件事strpos
是检查substring
的位置而jo
也是john
的子串,这就是为什么你得到的所有值相反,您可以简单地使用==
进行比较。
将其更改为:
if (strpos((string) $node->attributes()->emp_name, "jo") !== false) {
的此:强>
if ($node->attributes()->emp_name== "jo") {
答案 1 :(得分:0)
也许只是使用比较
if ( $node->attributes()->emp_name == "jo" )
strpos()返回子字符串的位置,它会得到一个整数,整数不等于false。 strpos()只有在字符串中找不到子字符串时才返回false(emp_name =&#34; david&#34;在你的情况下)。
答案 2 :(得分:0)
使用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) {
//...
}