9

In XSL 1.0, descendant-or-self will select ALL descendants and the current node. What if you want to select only the immediate children and the current node (i.e. child-or-self)?

Is that possible with XPATH?

Derek Hunziker
  • 12,996
  • 4
  • 57
  • 105

1 Answers1

12

In XPath 1.0 or later use:

SomeExpression | SomeExpresion/node()

In XPath 2.0 or later use:

SomeExpression/(self::node()|node())

An incorrect answer would be:

SomeExpression | SomeExpression/*

because this selects only those children of SomeExpression that are elements, while SomeExpression may have other children too -- as text-nodes, comment nodes, processing-instruction nodes.

Also incorrect is:

./SomeExpression | ./*/SomeExpression

This doesn't select the immediate children of ./SomeExpression and it doesn't select the immidiate children of ./*/SomeExpression.

MichaelChirico
  • 33,841
  • 14
  • 113
  • 198
Dimitre Novatchev
  • 240,661
  • 26
  • 293
  • 431