2010-01-25 3 views

ответ

2

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

foreach ($xml->xpath("//gig[last()]")[0]->attributes() as $Id){ 
} 
+0

К сожалению, подобное разыменование массива ('func() [0]') недопустимо синтаксисом PHP (на момент написания этого сообщения). Чтобы сохранить однострочный шрифт, можно использовать функцию 'current' (при условии, что всегда есть хотя бы один узел' gig'). Также OP хочет последний концерт, который является непосредственным потомком корневого узла (или, по крайней мере, это то, что кажется так, как они хотят). – salathe

+0

@salathe: Ах, спасибо за совет. Это не мой естественный язык ;-) –

1

Чтобы добраться до последнего gig узла, как Фрэнк Bollack отметил, мы могли бы использовать 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

foreach (current ($ xml-> xpath ('/ */gig [last()]')) -> attributes() as $ attr) { } отображает только атрибут от первого узла не последний. –

+0

Если первый узел не является последним, или ваше определение последнего отличается от моего, происходит что-то странное. Мы явно запрашиваем последний узел gig в выражении XPath. – salathe

1

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

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

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

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

$first_id = $xml->gig[0]['id']; 
$last_id = $xml->gig[count($xml->gig) - 1]['id']; 
0

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

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

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

Смежные вопросы