---
name: "HTML::Selector::XPath"
section: "3pm"
platform: "linux"
package: "libhtml-selector-xpath-perl"
version: "0.28-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/HTML::Selector::XPath"
---

# HTML::Selector::XPath(3pm)

CSS Selector to XPath compiler

## NAME

HTML::Selector::XPath - CSS Selector to XPath compiler

## SYNOPSIS

```
  use HTML::Selector::XPath;
  my $selector = HTML::Selector::XPath->new("li#main");
  $selector->to_xpath; # //li[@id='main']
  # functional interface
  use HTML::Selector::XPath 'selector_to_xpath';
  my $xpath = selector_to_xpath('div.foo');
  my $relative = selector_to_xpath('div.foo', root => '/html/body/p' );
  # /html/body/p/div[contains(concat(' ', @class, ' '), ' foo ')]
  my $relative = selector_to_xpath('div:root', root => '/html/body/p' );
  # /html/body/p/div
```

## DESCRIPTION

HTML::Selector::XPath is a utility function to compile full set of CSS2 and partial CSS3 selectors to the equivalent XPath expression.

## FUNCTIONS and METHODS

- selector\_to\_xpath

  ```
    $xpath = selector_to_xpath($selector, %options);
  ```

  Shortcut for `"HTML::Selector::XPath->new(shift)->to_xpath(@_)"`. Exported upon request.

- new

  ```
    $sel = HTML::Selector::XPath->new($selector, %options);
  ```

  Creates a new object.

- to\_xpath

  ```
    $xpath = $sel->to_xpath;
    $xpath = $sel->to_xpath(root => "."); # ./foo instead of //foo
  ```

  Returns the translated XPath expression. You can optionally pass `"root"` parameter, to specify which root to start the expression. It defaults to `"/"`.

  The optional `"prefix"` option allows you to specify a namespace prefix for the generated XPath expression.

## SUBCLASSING NOTES

- parse\_pseudo

  This method is called during xpath construction when we encounter a pseudo selector (something that begins with comma). It is passed the selector and a reference to the string we are parsing. It should return one or more xpath sub-expressions to add to the parts if the selector is handled, otherwise return an empty list.

## CAVEATS

### CSS SELECTOR VALIDATION

This module doesn't validate whether the original CSS Selector expression is valid. For example,

```
  div.123foo
```

is an invalid CSS selector (class names should not begin with numbers), but this module ignores that and tries to generate an equivalent XPath expression anyway.

## COPYRIGHT

Tatsuhiko Miyagawa 2006-2011

Max Maischein 2011-

## AUTHOR

Tatsuhiko Miyagawa \<miyagawa@bulknews.net\>

Most of the logic is based on Joe Hewitt's getElementsBySelector.js on \<http://www.joehewitt.com/blog/2006-03-20.php\> and Andrew Dupont's patch to Prototype.js on \<http://dev.rubyonrails.org/ticket/5171\>, but slightly modified using Aristotle Pegaltzis' CSS to XPath translation table per \<http://plasmasturm.org/log/444/\>

Also see

\<http://www.mail-archive.com/www-archive@w3.org/msg00906.html\>

and

\<http://kilianvalkhof.com/2008/css-xhtml/the-css3-not-selector/\>

## LICENSE

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

## SEE ALSO

\<http://www.w3.org/TR/REC-CSS2/selector.html\> \<http://use.perl.org/~miyagawa/journal/31090\> \<https://en.wikibooks.org/wiki/XPath/CSS\_Equivalents\>
