3

Assuming I have this XML:

<p>
    <a>
        <b>
            <jedi></jedi>
            <c>
                <jedi></jedi>
            </c>
        </b>
    </a>
    <a>
        <b>
            <jedi></jedi>
            <c>
                <jedi></jedi>
            </c>
        </b>
    </a>
</p>

and I want to select each first jedi appearance under <a> (2 results), regardless of the xml structure beneath <a>, how do I do this?

When I tried one of the examples below, all the <jedi> returned

  1. //a//jedi[1]
  2. //jedi[ancestor::a][1]

When I tried using brackets, below, only the very first returned and not each first.

  1. (//a//jedi)[1]
ceving
  • 21,900
  • 13
  • 104
  • 178
Shai Ben-Dor
  • 533
  • 9
  • 21
  • Possible duplicate of [How to select specified node within Xpath node sets by index with Selenium?](http://stackoverflow.com/questions/3674569/how-to-select-specified-node-within-xpath-node-sets-by-index-with-selenium) – har07 Feb 02 '16 at 10:18

1 Answers1

4

Try //a/descendant::jedi[1]

Example:

# tee < x >(java -cp Saxon-HE-9.5.1-5.jar net.sf.saxon.Query -s:- -qs:'//a/descendant::jedi[1]')
<p>
  <a>
    <b>
      <jedi>1</jedi>
      <c>
        <jedi>2</jedi>
      </c>
    </b>
  </a>
  <a>
    <b>
      <jedi>3</jedi>
      <c>
        <jedi>4</jedi>
      </c>
    </b>
  </a>
</p>
# <?xml version="1.0" encoding="UTF-8"?><jedi>1</jedi><jedi>3</jedi>
ceving
  • 21,900
  • 13
  • 104
  • 178