我需要在另一个标签内读取标签的XML属性

时间:2013-11-29 19:40:23

标签: php xml

我试图单独解决这个问题,但已经过了好几周而且我无法解决这个问题......

我有一个像这样的XML:

<?xml version="1.0" encoding="UTF-8"?>

<clothes>

<clothe premium="no" id="1">
    <list gender="0" style="11" name="Jacket"/>
    <list gender="1" style="12" name="Jacket"/>
</clothe>

<clothe premium="yes" id="2">
    <list gender="0" style="13" name="Pants"/>
    <list gender="1" style="14" name="Pants"/>
</clothe>

</clothes>

我想读一下“衣服”的属性:'premium'和'id' 并在其下方的“列表”中显示属性:“性别”,“样式”和“名称”。

Obs:我做过的最好的事情就是让php读取第一个或最后一个“list”属性,然后我需要阅读“clothe”中的所有标签。

性别0 =男性 性别1 =女性

以下是我使用的示例,我需要帮助:

public function getClothes()
{
    $clothes = array();

    foreach( $this->element->getElementsByTagName('list') as $list)
    {
        $clothes[] = $list->getAttribute('gender');
        $clothes[] = $list->getAttribute('style');
        $clothes[] = $list->getAttribute('name');
    }

    return $clothes;
}

1 个答案:

答案 0 :(得分:1)

DOM节点是树的成员,并且完全了解其父/子。所以...搜索clothe元素:

$clothes = $this->element->getElementsByTagName('clothe');
foreach($clothes as $clothe) {
    $premium = $clothe->getAttribute('premium');

    $lists = $clothe->getElementsByTagName('list'); // get all `<list>` under the current node
    foreach($lists as $list ) {
         $gender = $list->getAttribute('gender');
         ...
    }
}

一旦您获得了<clothe>元素,请搜索其下方的所有<list>