PHP SimpleXML抓取属性


PHP SimpleXML grab attribute

我使用SimpleXML,想要获得每个不同的learner及其子rater属性,如何将其解析为一个单独的属性,如:

Learner: John
Rater_1_name: John
Rater_1_email: john@domain.com
Rater_1_group: Self
Rater_2_name: Jane
Rater_2_email: jane@domain.com
Rater_2_group: Manager
Rater_3_name: Nathan
Rater_3_email: nathan@domain.com
Rater_3_group: Peers
// and so on...

要解析的代码:

$xml = '
<users>
    <learner name="John">
        <rater name="John" email="john@domain.com" group="Self"></rater>
        <rater name="Jane" email="jane@domain.com" group="Manager"></rater>
        <rater name="Nathan" email="nathan@domain.com" group="Peers"></rater>
    </learner>
    <learner name="Jane">
        <rater name="Jane" email="jane@domain.com" group="Self"></rater>
        <rater name="John" email="john@domain.com" group="Peers"></rater>
        <rater name="Nathan" email="nathan@domain.com" group="Others"></rater>
    </learner>
</users>
';
$sxe = new SimpleXMLElement($xml);
echo $sxe->asXML();

谢谢。

您可以在foreach()循环中访问元素,因为SimpleXMLElement实现了Traversable接口。因此,应该从以下方面入手:-

$xml = '
<users>
    <learner name="John">
        <rater name="John" email="john@domain.com" group="Self"></rater>
        <rater name="Jane" email="jane@domain.com" group="Manager"></rater>
        <rater name="Nathan" email="nathan@domain.com" group="Peers"></rater>
    </learner>
    <learner name="Jane">
        <rater name="Jane" email="jane@domain.com" group="Self"></rater>
        <rater name="John" email="john@domain.com" group="Peers"></rater>
        <rater name="Nathan" email="nathan@domain.com" group="Others"></rater>
    </learner>
</users>
';
$sxe = simplexml_load_string($xml);
foreach($sxe as $learner){
    $attr = $learner->attributes();
    $name = $attr['name'];
    echo "Learner $name <br/>Rated by:-<br/>'n";
    foreach($learner->rater as $rater){
        foreach($rater->attributes() as $key => $value){
            echo " - $key = $value <br/>'n";
        }
    }
}

输出:-

Learner John 
Rated by:-
- name = John 
- email = john@domain.com 
- group = Self 
- name = Jane 
- email = jane@domain.com 
- group = Manager 
- name = Nathan 
- email = nathan@domain.com 
- group = Peers 
Learner Jane 
Rated by:-
- name = Jane 
- email = jane@domain.com 
- group = Self 
- name = John 
- email = john@domain.com 
- group = Peers 
- name = Nathan 
- email = nathan@domain.com 
- group = Others 

查看它的工作