php解析xml使用完全属性

时间:2017-08-15 05:32:27

标签: php xml

输入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

怎么做?

3 个答案:

答案 0 :(得分:0)

你在这里做错了一件事strpos是检查substring的位置而jo也是john的子串,这就是为什么你得到的所有值相反,您可以简单地使用==进行比较。

Try this code snippet here

将其更改为:

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) {
  //...
}