protected function DrupalWebTestCase::buildXPathQuery

7.x drupal_web_test_case.php protected DrupalWebTestCase::buildXPathQuery($xpath, array $args = array())

Builds an XPath query.

Builds an XPath query by replacing placeholders in the query by the value of the arguments.

XPath 1.0 (the version supported by libxml2, the underlying XML library used by PHP) doesn't support any form of quotation. This function simplifies the building of XPath expression.


$xpath: An XPath query, possibly with placeholders in the form ':name'.

$args: An array of arguments with keys in the form ':name' matching the placeholders in the query. The values may be either strings or numeric values.

Return value

An XPath query with arguments replaced.

7 calls to DrupalWebTestCase::buildXPathQuery()
BlockTestCase::moveBlockToRegion in drupal/modules/block/block.test
BlockTestCase::testBlock in drupal/modules/block/block.test
Test configuring and moving a module-define block to specific regions.
DrupalRenderTestCase::assertRenderedElement in drupal/modules/simpletest/tests/common.test
DrupalWebTestCase::constructFieldXpath in drupal/modules/simpletest/drupal_web_test_case.php
Helper function: construct an XPath for the given set of attributes and value.
DrupalWebTestCase::xpath in drupal/modules/simpletest/drupal_web_test_case.php
Perform an xpath search on the contents of the internal browser. The search is relative to the root element (HTML tag normally) of the page.

... See full list


drupal/modules/simpletest/drupal_web_test_case.php, line 2494


Test case for typical Drupal tests.


protected function buildXPathQuery($xpath, array $args = array()) {
  // Replace placeholders.
  foreach ($args as $placeholder => $value) {
    // XPath 1.0 doesn't support a way to escape single or double quotes in a
    // string literal. We split double quotes out of the string, and encode
    // them separately.
    if (is_string($value)) {
      // Explode the text at the quote characters.
      $parts = explode('"', $value);

      // Quote the parts.
      foreach ($parts as &$part) {
        $part = '"' . $part . '"';

      // Return the string.
      $value = count($parts) > 1 ? 'concat(' . implode(', \'"\', ', $parts) . ')' : $parts[0];
    $xpath = preg_replace('/' . preg_quote($placeholder) . '\b/', $value, $xpath);
  return $xpath;