# phpman > perldoc > XML::LibXML::Pattern

## NAME
    [XML::LibXML::Pattern](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ALibXML%3A%3APattern/markdown) - [XML::LibXML::Pattern](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ALibXML%3A%3APattern/markdown) - interface to libxml2 XPath patterns

## SYNOPSIS
      use [XML::LibXML](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ALibXML/markdown);
      my $pattern = [XML::LibXML::Pattern](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ALibXML%3A%3APattern/markdown)->new('/x:html/x:body//x:div', { 'x' => '<http://www.w3.org/1999/xhtml>' });
      # test a match on an [XML::LibXML::Node](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ALibXML%3A%3ANode/markdown) $node

      if ($pattern->matchesNode($node)) { ... }

      # or on an [XML::LibXML::Reader](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ALibXML%3A%3AReader/markdown)

      if ($reader->matchesPattern($pattern)) { ... }

      # or skip reading all nodes that do not match

      print $reader->nodePath while $reader->nextPatternMatch($pattern);

      $pattern = [XML::LibXML::Pattern](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ALibXML%3A%3APattern/markdown)->new( pattern, { prefix => namespace_URI, ... } );
      $bool = $pattern->matchesNode($node);

## DESCRIPTION
    This is a perl interface to libxml2's pattern matching support
    *<http://xmlsoft.org/html/libxml-pattern.html>*. This feature requires recent versions of libxml2.

    Patterns are a small subset of XPath language, which is limited to (disjunctions of) location
    paths involving the child and descendant axes in abbreviated form as described by the extended
    BNF given below:

      Selector ::=     Path ( '|' Path )*
      Path     ::=     ('.//' | '//' | '/' )? Step ( '/' Step )*
      Step     ::=     '.' | NameTest
      NameTest ::=     QName | '*' | NCName ':' '*'

    For readability, whitespace may be used in selector XPath expressions even though not explicitly
    allowed by the grammar: whitespace may be freely added within patterns before or after any
    token, where

      token     ::=     '.' | '/' | '//' | '|' | NameTest

    Note that no predicates or attribute tests are allowed.

    Patterns are particularly useful for stream parsing provided via the "[XML::LibXML::Reader](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ALibXML%3A%3AReader/markdown)"
    interface.

### new
          $pattern = [XML::LibXML::Pattern](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ALibXML%3A%3APattern/markdown)->new( pattern, { prefix => namespace_URI, ... } );

        The constructor of a pattern takes a pattern expression (as described by the BNF grammar
        above) and an optional HASH reference mapping prefixes to namespace URIs. The method returns
        a compiled pattern object.

        Note that if the document has a default namespace, it must still be given an prefix in order
        to be matched (as demanded by the XPath 1.0 specification). For example, to match an element
        "<a xmlns="<http://foo.bar>"</a>", one should use a pattern like this:

          $pattern = [XML::LibXML::Pattern](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ALibXML%3A%3APattern/markdown)->new( 'foo:a', { foo => '<http://foo.bar>' });

### matchesNode
          $bool = $pattern->matchesNode($node);

        Given an [XML::LibXML::Node](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ALibXML%3A%3ANode/markdown) object, returns a true value if the node is matched by the
        compiled pattern expression.

## SEE ALSO
    [XML::LibXML::Reader](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ALibXML%3A%3AReader/markdown) for other methods involving compiled patterns.

## AUTHORS
    Matt Sergeant, Christian Glahn, Petr Pajas

## VERSION
    2.0134

## COPYRIGHT
    2001-2007, AxKit.com Ltd.

    2002-2006, Christian Glahn.

    2006-2009, Petr Pajas.

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

