---
name: "XML::LibXML::Pattern"
section: "3pm"
platform: "linux"
package: "perl-xml-libxml"
version: "2.0213-2"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/XML::LibXML::Pattern"
---

# XML::LibXML::Pattern(3pm)

XML::LibXML::Pattern - interface to libxml2 XPath patterns

## NAME

XML::LibXML::Pattern - XML::LibXML::Pattern - interface to libxml2 XPath patterns

## SYNOPSIS

```
  use XML::LibXML;
  my $pattern = XML::LibXML::Pattern->new('/x:html/x:body//x:div', { 'x' => 'http://www.w3.org/1999/xhtml' });
  # test a match on an XML::LibXML::Node $node
  if ($pattern->matchesNode($node)) { ... }
  # or on an XML::LibXML::Reader
  if ($reader->matchesPattern($pattern)) { ... }
  # or skip reading all nodes that do not match
  print $reader->nodePath while $reader->nextPatternMatch($pattern);
  $pattern = XML::LibXML::Pattern->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"` interface.

- **new()**

  ```
    $pattern = XML::LibXML::Pattern->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->new( 'foo:a', { foo => 'http://foo.bar' });
  ```

- matchesNode($node)

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

  Given an XML::LibXML::Node object, returns a true value if the node is matched by the compiled pattern expression.

## SEE ALSO

XML::LibXML::Reader for other methods involving compiled patterns.

## AUTHORS

Matt Sergeant, Christian Glahn, Petr Pajas

## VERSION

2\.0213

## 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.
