How can I ignore first element and get rest of the elements?
<ul>
<li><a href="#">some link</a></li>
<li><a href="#">some link 2</a></li>
<li><a href="#">link i want to find</a></li>
</ul>
Thanks
How can I ignore first element and get rest of the elements?
<ul>
<li><a href="#">some link</a></li>
<li><a href="#">some link 2</a></li>
<li><a href="#">link i want to find</a></li>
</ul>
Thanks
Assuming you want the anchor:
$first = true;
foreach($xml->xpath('//a') as $node) {
if (!$first) {
// Do your thing
} else {
$first = false;
}
}
if you want to ignore the "first" element only then:
//li[position()>1]
or
(//a)[position()>1]
if you want the last only (like your example seems to suggest):
//li[last()]
or
(//a)[last()]
You can use position()
to skip over the "first" one, but depending on which element you are interested in and what the context is, you may need a slight variation on your XPATH.
For instance, if you wanted to address all of the li
elements and get all except the first, you could use:
//li[position()>1]
and it would work as expected, returning all of the li
elements except for the first.
However, if you wanted to address all of the a
elements you need to modify the XPATH slightly. In the context of the expression //a[position()>1]
each one of the a
elements will have a position()
of 1 and last()
will evaluate to true. So, it would always return every a
and would not skip over the first one.
You need to wrap the expression that selects the a
in parenthesis to group them in a node-set, then apply the predicate filter on position.
(//a)[position()>1]
Alternatively, you could also use an expression like this:
//a[preceding::a]
That will find all a
elements except the first one (since there is no a
preceding the first one).