Выбор последнего узла в SimpleXML - PullRequest
0 голосов
/ 25 января 2010

Я хочу найти атрибут последнего узла в XML-файле.

следующий код находит атрибут первого узла. Есть ли способ найти последний узел?

foreach ($xml->gig[0]->attributes() as $Id){
}

спасибо

Ответы [ 4 ]

2 голосов
/ 25 января 2010

Я не знаком с PHP, но вы можете попробовать следующее, используя запрос XPath:

foreach ($xml->xpath("//gig[last()]")[0]->attributes() as $Id){
}
1 голос
/ 25 января 2010

Это правда, что вы можете использовать XPath для получения последнего узла (будь то узел <gig/> или другой), но вы также можете отразить ту же технику, что и для первого узла. Таким образом:

// first <gig/>
$xml->gig[0]

// last <gig/>
$xml->gig[count($xml->gig) - 1]

Редактировать: Я только что понял, вы просто пытаетесь получить атрибут @id первого и последнего узла <gig/>? В этом случае забудьте о attributes() и используйте вместо этого нотацию SimpleXML: к атрибутам обращаются так, как если бы они были ключами массива.

$first_id = $xml->gig[0]['id'];
$last_id  = $xml->gig[count($xml->gig) - 1]['id'];
1 голос
/ 25 января 2010

Чтобы добраться до последнего gig узла, как заметил Фрэнк Боллак, мы могли бы использовать XPath.

foreach (current($xml->xpath('/*/gig[last()]'))->attributes() as $attr) {
}

Или немного более многословно, но приятнее:

$attrs = array();
$nodes = $xml->xpath('/*/gig[last()]');
if (is_array($nodes) && ! empty($nodes)) {
    foreach ($nodes[0]->attributes() as $attr) {
        $attrs[$attr->getName()] = (string) $attr;
    }
}
var_dump($attrs);
0 голосов
/ 25 января 2010

Я думаю, что это выражение xpath должно работать

$xml->xpath('root/child[last()]');

Это должно извлечь последний дочерний элемент, который является дочерним элементом корневого элемента.

...