2015-02-12 66 views
1

我有一个XML字符串,我试图提取儿童标签的名称。每个儿童标签都是自动关闭的。我试图用SimpleXMLElementXML:PHP只解析一系列的儿童中的第一个

$xml_str = '1<?xml version="1.0" encoding="UTF-8"?><parent><personal_data><child1 attr="sth /><child2 attr=sth2/></personal_data><personal_data><child1 attr="sth /><child2 attr=sth2/></personal_data</parent>'; 

$sxe = new SimpleXMLElement($xml); 

//get the children from the parent 
$sxe = $sxe->children(); 
echo $sxe; 
$form_mappers = array(); 
foreach ($sxe->children() as $child){ 
    array_push($form_mappers, $child->getName()); 
}   

echo var_dump($form_mappers); //only children from the first parent 

这仅获得第aParent节点的孩子。为什么我不能得到第二个孩子的节点?

+0

@Ghost我认为,任何畸形的产物我把一个样本放在一起。这个验证器http://xmlgrid.net/validator.html说我的实际XML是有效的。 – 1252748 2015-02-12 00:10:04

+0

无论如何预期输出是什么? 4个孩子?你需要循环内eeach个人资料 – Ghost 2015-02-12 00:11:04

+0

是啊,四个孩子'child1,child2,child1,child1' – 1252748 2015-02-12 00:12:37

回答

1

如果你想获得的所有<child*>节点,你需要遍历每个<personal_data>也得到内部级内部:

$form_mappers = array(); 
foreach ($sxe->children() as $personal_data){ 
    foreach($personal_data->children() as $child) { 
     $form_mappers[] = $child->getName(); 
    } 
} 

Sample Output

+0

这是完美的。非常感谢你。 – 1252748 2015-02-12 00:23:46

+0

@ thomas肯定我很高兴这有帮助 – Ghost 2015-02-12 00:24:44

+0

回想起来,这似乎很明显。我想我的主要问题是:为什么我的代码检索'child1','child2',而不是'personal_data','personal_data'? – 1252748 2015-02-12 15:15:11