# phpman > perldoc > XML::DOM::Parser

## NAME
    [XML::DOM::Parser](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ADOM%3A%3AParser/markdown) - An [XML::Parser](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3AParser/markdown) that builds [XML::DOM](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ADOM/markdown) document structures

## SYNOPSIS
     use [XML::DOM](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ADOM/markdown);

     my $parser = new [XML::DOM::Parser](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ADOM%3A%3AParser/markdown);
     my $doc = $parser->parsefile ("file.xml");
     $doc->dispose; # Avoid memory leaks - cleanup circular references

## DESCRIPTION
    [XML::DOM::Parser](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ADOM%3A%3AParser/markdown) extends [XML::Parser](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3AParser/markdown)

    The [XML::Parser](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3AParser/markdown) module was written by Clark Cooper and is built on top of [XML::Parser::Expat](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3AParser%3A%3AExpat/markdown),
    which is a lower level interface to James Clark's expat library.

    [XML::DOM::Parser](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ADOM%3A%3AParser/markdown) parses XML strings or files and builds a data structure that conforms to the
    API of the Document Object Model as described at <<http://www.w3.org/TR/REC-DOM-Level-1>>. See the
    [XML::Parser](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3AParser/markdown) manpage for other additional properties of the [XML::DOM::Parser](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ADOM%3A%3AParser/markdown) class. Note that the
    'Style' property should not be used (it is set internally.)

    The [XML::Parser](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3AParser/markdown) NoExpand option is more or less supported, in that it will generate
    EntityReference objects whenever an entity reference is encountered in character data. I'm not
    sure how useful this is. Any comments are welcome.

    As described in the synopsis, when you create an [XML::DOM::Parser](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ADOM%3A%3AParser/markdown) object, the parse and
    parsefile methods create an [XML::DOM::Document](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ADOM%3A%3ADocument/markdown) object from the specified input. This Document
    object can then be examined, modified and written back out to a file or converted to a string.

    When using [XML::DOM](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ADOM/markdown) with [XML::Parser](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3AParser/markdown) version 2.19 and up, setting the [XML::DOM::Parser](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ADOM%3A%3AParser/markdown) option
    KeepCDATA to 1 will store CDATASections in CDATASection nodes, instead of converting them to
    Text nodes. Subsequent CDATASection nodes will be merged into one. Let me know if this is a
    problem.

## Using LWP to parse URLs
    The parsefile() method now also supports URLs, e.g. *<http://www.erols.com/enno/xsa.xml>*. It uses
    LWP to download the file and then calls parse() on the resulting string. By default it will use
    a [LWP::UserAgent](https://www.chedong.com/phpMan.php/perldoc/LWP%3A%3AUserAgent/markdown) that is created as follows:

     use [LWP::UserAgent](https://www.chedong.com/phpMan.php/perldoc/LWP%3A%3AUserAgent/markdown);
     $LWP_USER_AGENT = [LWP::UserAgent](https://www.chedong.com/phpMan.php/perldoc/LWP%3A%3AUserAgent/markdown)->new;
     $LWP_USER_AGENT->env_proxy;

    Note that env_proxy reads proxy settings from environment variables, which is what I need to do
    to get thru our firewall. If you want to use a different [LWP::UserAgent](https://www.chedong.com/phpMan.php/perldoc/LWP%3A%3AUserAgent/markdown), you can either set it
    globally with:

     [XML::DOM::Parser::set_LWP_UserAgent](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ADOM%3A%3AParser%3A%3AsetLWPUserAgent/markdown) ($my_agent);

    or, you can specify it for a specific [XML::DOM::Parser](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ADOM%3A%3AParser/markdown) by passing it to the constructor:

     my $parser = new [XML::DOM::Parser](https://www.chedong.com/phpMan.php/perldoc/XML%3A%3ADOM%3A%3AParser/markdown) (LWP_UserAgent => $my_agent);

    Currently, LWP is used when the filename (passed to parsefile) starts with one of the following
    URL schemes: http, https, ftp, wais, gopher, or file (followed by a colon.) If I missed one,
    please let me know.

    The LWP modules are part of libwww-perl which is available at CPAN.

