# phpman > perldoc > XML::LibXML::Error

## NAME
    [XML::LibXML::Error](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ALibXML%3A%3AError/markdown) - Structured Errors

## SYNOPSIS
      eval { ... };
              if (ref($@)) {
                # handle a structured error ([XML::LibXML::Error](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ALibXML%3A%3AError/markdown) object)
              } elsif ($@) {
                # error, but not an [XML::LibXML::Error](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ALibXML%3A%3AError/markdown) object
              } else {
                # no error
              }

      $[XML::LibXML::Error::WARNINGS](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ALibXML%3A%3AError%3A%3AWARNINGS/markdown)=1;
      $message = $@->as_string();
      print $@->dump();
      $error_domain = $@->domain();
      $error_code = $@->code();
      $error_message = $@->message();
      $error_level = $@->level();
      $filename = $@->file();
      $line = $@->line();
      $nodename = $@->nodename();
      $error_str1 = $@->str1();
      $error_str2 = $@->str2();
      $error_str3 = $@->str3();
      $error_num1 = $@->num1();
      $error_num2 = $@->num2();
      $string = $@->context();
      $offset = $@->column();
      $previous_error = $@->_prev();

## DESCRIPTION
    The [XML::LibXML::Error](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ALibXML%3A%3AError/markdown) class is a tiny frontend to *libxml2*'s structured error support. If
    [XML::LibXML](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ALibXML/markdown) is compiled with structured error support, all errors reported by libxml2 are
    transformed to [XML::LibXML::Error](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ALibXML%3A%3AError/markdown) objects. These objects automatically serialize to the
    corresponding error messages when printed or used in a string operation, but as objects, can
    also be used to get a detailed and structured information about the error that occurred.

    Unlike most other [XML::LibXML](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ALibXML/markdown) objects, [XML::LibXML::Error](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ALibXML%3A%3AError/markdown) doesn't wrap an underlying *libxml2*
    structure directly, but rather transforms it to a blessed Perl hash reference containing the
    individual fields of the structured error information as hash key-value pairs. Individual items
    (fields) of a structured error can either be obtained directly as $@->{field}, or using
    autoloaded methods such as $@->field() (where field is the field name). [XML::LibXML::Error](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ALibXML%3A%3AError/markdown)
    objects have the following fields: domain, code, level, file, line, nodename, message, str1,
    str2, str3, num1, num2, and _prev (some of them may be undefined).

    $[XML::LibXML::Error::WARNINGS](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ALibXML%3A%3AError%3A%3AWARNINGS/markdown)
          $[XML::LibXML::Error::WARNINGS](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ALibXML%3A%3AError%3A%3AWARNINGS/markdown)=1;

        Traditionally, [XML::LibXML](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ALibXML/markdown) was suppressing parser warnings by setting libxml2's global
        variable xmlGetWarningsDefaultValue to 0. Since 1.70 we do not change libxml2's global
        variables anymore; for backward compatibility, [XML::LibXML](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ALibXML/markdown) suppresses warnings. This
        variable can be set to 1 to enable reporting of these warnings via Perl "warn" and to 2 to
        report hem via "die".

    as_string
          $message = $@->as_string();

        This function serializes an [XML::LibXML::Error](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ALibXML%3A%3AError/markdown) object to a string containing the full error
        message close to the message produced by *libxml2* default error handlers and tools like
        xmllint. This method is also used to overload "" operator on [XML::LibXML::Error](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ALibXML%3A%3AError/markdown), so it is
        automatically called whenever [XML::LibXML::Error](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ALibXML%3A%3AError/markdown) object is treated as a string (e.g. in
        print $@).

    dump
          print $@->dump();

        This function serializes an [XML::LibXML::Error](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ALibXML%3A%3AError/markdown) to a string displaying all fields of the
        error structure individually on separate lines of the form 'name' => 'value'.

    domain
          $error_domain = $@->domain();

        Returns string containing information about what part of the library raised the error. Can
        be one of: "parser", "tree", "namespace", "validity", "HTML parser", "memory", "output",
        "I/O", "ftp", "http", "XInclude", "XPath", "xpointer", "regexp", "Schemas datatype",
        "Schemas parser", "Schemas validity", "Relax-NG parser", "Relax-NG validity", "Catalog",
        "C14N", "XSLT", "validity".

    code
          $error_code = $@->code();

        Returns the actual libxml2 error code. The [XML::LibXML::ErrNo](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ALibXML%3A%3AErrNo/markdown) module defines constants for
        individual error codes. Currently libxml2 uses over 480 different error codes.

    message
          $error_message = $@->message();

        Returns a human-readable informative error message.

    level
          $error_level = $@->level();

        Returns an integer value describing how consequent is the error. [XML::LibXML::Error](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ALibXML%3A%3AError/markdown) defines
        the following constants:

        *   XML_ERR_NONE = 0

        *   XML_ERR_WARNING = 1 : A simple warning.

        *   XML_ERR_ERROR = 2 : A recoverable error.

        *   XML_ERR_FATAL = 3 : A fatal error.

    file
          $filename = $@->file();

        Returns the filename of the file being processed while the error occurred.

    line
          $line = $@->line();

        The line number, if available.

    nodename
          $nodename = $@->nodename();

        Name of the node where error occurred, if available. When this field is non-empty, libxml2
        actually returned a physical pointer to the specified node. Due to memory management issues,
        it is very difficult to implement a way to expose the pointer to the Perl level as a
        [XML::LibXML::Node](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ALibXML%3A%3ANode/markdown). For this reason, [XML::LibXML::Error](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ALibXML%3A%3AError/markdown) currently only exposes the name the
        node.

    str1
          $error_str1 = $@->str1();

        Error specific. Extra string information.

    str2
          $error_str2 = $@->str2();

        Error specific. Extra string information.

    str3
          $error_str3 = $@->str3();

        Error specific. Extra string information.

    num1
          $error_num1 = $@->num1();

        Error specific. Extra numeric information.

    num2
          $error_num2 = $@->num2();

        In recent libxml2 versions, this value contains a column number of the error or 0 if N/A.

    context
          $string = $@->context();

        For parsing errors, this field contains about 80 characters of the XML near the place where
        the error occurred. The field "$@->column()" contains the corresponding offset. Where N/A,
        the field is undefined.

    column
          $offset = $@->column();

        See "$@->column()" above.

    _prev
          $previous_error = $@->_prev();

        This field can possibly hold a reference to another [XML::LibXML::Error](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ALibXML%3A%3AError/markdown) object representing
        an error which occurred just before this error.

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

