Testing text() nodes vs string values in XPath

XPath text() = is different than XPath . =

(Matching text nodes is different than matching string values)

The following XPaths are not the same…

  1. //span[text() = 'Office Hours']

    Says:

    Select the span elements that
    have an immediate child
    text node equal to ‘Office Hours`.

  2. //span[. = 'Office Hours']

    Says:

    Select the span elements whose string value is equal to ‘Office Hours`.

In short, for element nodes:

The string-value of an element node is the concatenation of the
string-values of all text node descendants of the element
node in document order.

Examples

The following span elements would match only #1:

  • <span class="portal-text-medium">Office Hours<br/>8:00-10:00</span>
  • <span class="portal-text-medium">My<br/>Office Hours</span>

The following span elements would match only #2:

  • <span class="portal-text-medium"><b>Office</b> Hours</span>
  • <span class="portal-text-medium"><b><i>Office Hours</i></b></span>

The following span element would match both #1 and #2:

  • <span class="portal-text-medium">Office Hours</span>

Leave a Comment