SimpleXML更多标签在1个元素中

时间:2009-07-16 09:45:44

标签: php xml simplexml

嘿伙计们,我想解析一些xml,但我不知道如何从1个元素中获取相同的标签。

我想解析一下:

<profile>
   <name>john</name>
   <lang>english</lang>
   <lang>dutch</lang>
</profile>

所以我想解析约翰所说的语言。我怎么能这样做?

4 个答案:

答案 0 :(得分:2)

$profile->lang[0]
$profile->lang[1]

答案 1 :(得分:2)

使用SimpleXML将元素节点拉入后,可以在元素节点上运行foreach循环,如下所示:

$xml_profiles = simplexml_load_file($file_profiles);

foreach($xml_profiles->profile as $profile)
{   //-- first foreach pulls out each profile node

    foreach($profile->lang as $lang_spoken)
    {   //-- will pull out each lang node into a variable called $lang_spoken
        echo $lang_spoken;
    }
}

这样做的好处是能够处理每个配置文件元素可能拥有或不拥有的任意数量的lang元素。

答案 2 :(得分:1)

将重复的XML节点视为像数组一样。

正如其他人所指出的那样,您可以使用括号语法

访问子节点
myXML->childNode[childIndex]

作为旁注,这是RSS提要的工作方式。你会注意到多个

<item>
</item>

<item>
</item>

<item>
</item>

RSS XML标记内的标记。 RSS阅读器每天通过将列表视为元素数组来处理这个问题。

可以循环使用。

答案 3 :(得分:0)

您还可以使用XPath收集特定元素的数组,例如

$xProfile = simplexml_load_string("<profile>...</profile>");
$sName = 'john';
$aLang = $xProfile->xpath("/profile/name[text()='".$sName."']/lang");
// Now $aLang will be an array of lang *nodes* (2 for John). Because they
// are nodes you can still do SimpleXML "stuff" with them i.e.
// $aLang[0]->attributes(); --which is an empty object
// or even

$sPerson = (string)$aLang[0]->xpath('preceding-sibling::name');
// of course you already know this... but this was just to show what you can do
// with the SimpleXml node.