2013-11-25 66 views
0

我使用SimpleXML并希望得到每个不同learner及其子rater属性,我怎么能解析它变成像一个单独的:PHP的SimpleXML抢属性

Learner: John 

Rater_1_name: John 
Rater_1_email: [email protected] 
Rater_1_group: Self 

Rater_2_name: Jane 
Rater_2_email: [email protected] 
Rater_2_group: Manager 

Rater_3_name: Nathan 
Rater_3_email: [email protected] 
Rater_3_group: Peers 

// and so on... 

代码解析:

$xml = ' 
<users> 
    <learner name="John"> 
     <rater name="John" email="[email protected]" group="Self"></rater> 
     <rater name="Jane" email="[email protected]" group="Manager"></rater> 
     <rater name="Nathan" email="[email protected]" group="Peers"></rater> 
    </learner> 
    <learner name="Jane"> 
     <rater name="Jane" email="[email protected]" group="Self"></rater> 
     <rater name="John" email="[email protected]" group="Peers"></rater> 
     <rater name="Nathan" email="[email protected]" group="Others"></rater> 
    </learner> 
</users> 
'; 

$sxe = new SimpleXMLElement($xml); 
echo $sxe->asXML(); 

谢谢。

回答

0

您可以在foreach()循环中访问您的元素,因为SimpleXMLElement实现了Traversable接口。所以,这些方针的东西应该让你开始: -

$xml = ' 
<users> 
    <learner name="John"> 
     <rater name="John" email="[email protected]" group="Self"></rater> 
     <rater name="Jane" email="[email protected]" group="Manager"></rater> 
     <rater name="Nathan" email="[email protected]" group="Peers"></rater> 
    </learner> 
    <learner name="Jane"> 
     <rater name="Jane" email="[email protected]" group="Self"></rater> 
     <rater name="John" email="[email protected]" group="Peers"></rater> 
     <rater name="Nathan" email="[email protected]" 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 = [email protected] 
- group = Self 
- name = Jane 
- email = [email protected] 
- group = Manager 
- name = Nathan 
- email = [email protected] 
- group = Peers 
Learner Jane 
Rated by:- 
- name = Jane 
- email = [email protected] 
- group = Self 
- name = John 
- email = [email protected] 
- group = Peers 
- name = Nathan 
- email = [email protected] 
- group = Others 

See it working