php parse xml get属性

时间:2017-08-02 09:43:58

标签: php xml wordpress

我是php的新手。

所以,我想从url解析xml,如:

<?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="marry"><img>marry_1.jpg</img></emp>
    <emp emp_name="marry"><img>marry_2.jpg</img></emp>
    <emp emp_name="david"><img>david_1.jpg</img></emp>
</emp_detail>
</all_emp>

我创建了代码来解析它:

function get_empname() {
    $url ='http://.../emp_test.xml';
    $xml=simplexml_load_file("$url") or die("Error: Cannot create object");
    foreach($xml->children() as $emp_detail) {
        $source = $xml->emp_detail->emp->attributes()->emp_name . "<br>";
        return $source; 
    } 
}

我可以解析xml。

但是,这是我得到的结果:

john

我对此有疑问:

  1. 如何获取所有emp_name属性?

  2. 如果emp_name相同,如何分组?

  3. 感谢您阅读!

1 个答案:

答案 0 :(得分:0)

看起来您的XML正在被正确解析,您唯一的问题是您从循环内返回,导致它只运行一次。对emp_name部分尝试以下操作。这也将只返回unqiue名称。

function create_shortcode_empname()
{
    $url ='http://localhost/emp_test.xml';
    $xml=simplexml_load_file("$url") or die("Error: Cannot create object");
    $names = array();   
    $emps = $xml->children()->emp_detail->emp ; 
    foreach($emps as $emp_detail)
    {
        $source = (string)$emp_detail->attributes()->emp_name; 
        $names[]= $source; 
    } 
    $names = array_unique($names); 
    return implode("<br />", $names);
}

add_shortcode( 'empname_shortcode', 'create_shortcode_empname' );
相关问题