XML::DOM 1.44 review

Download
by rbytes.net on

XML::DOM is a perl module for building DOM Level 1 compliant document structures. SYNOPSIS use XML::DOM; my $parser = new

License: GPL (GNU General Public License)
File size: 114K
Developer: T.J. Mather
0 stars award from rbytes.net

XML::DOM is a perl module for building DOM Level 1 compliant document structures.

SYNOPSIS

use XML::DOM;

my $parser = new XML::DOM::Parser;
my $doc = $parser->parsefile ("file.xml");

# print all HREF attributes of all CODEBASE elements
my $nodes = $doc->getElementsByTagName ("CODEBASE");
my $n = $nodes->getLength;

for (my $i = 0; $i < $n; $i++)
{
my $node = $nodes->item ($i);
my $href = $node->getAttributeNode ("HREF");
print $href->getValue . "n";
}

# Print doc file
$doc->printToFile ("out.xml");

# Print to string
print $doc->toString;

# Avoid memory leaks - cleanup circular references for garbage collection
$doc->dispose;

This module extends the XML::Parser module by Clark Cooper. The XML::Parser module is built on top of XML::Parser::Expat, which is a lower level interface to James Clark's expat library.

XML::DOM::Parser is derived from XML::Parser. It 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 manpage for other available features of the XML::DOM::Parser class. Note that the 'Style' property should not be used (it is set internally.)

The XML::Parser 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 object, the parse and parsefile methods create an XML::DOM::Document 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 with XML::Parser version 2.19 and up, setting the XML::DOM::Parser 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.
When using XML::Parser 2.27 and above, you can suppress expansion of parameter entity references (e.g. %pent;) in the DTD, by setting ParseParamEnt to 1 and ExpandParamEnt to 0. See Hidden Nodes for details.

A Document has a tree structure consisting of Node objects. A Node may contain other nodes, depending on its type. A Document may have Element, Text, Comment, and CDATASection nodes. Element nodes may have Attr, Element, Text, Comment, and CDATASection nodes. The other nodes may not have any child nodes.

This module adds several node types that are not part of the DOM spec (yet.) These are: ElementDecl (for < !ELEMENT ... > declarations), AttlistDecl (for < !ATTLIST ... > declarations), XMLDecl (for < ?xml ...? > declarations) and AttDef (for attribute definitions in an AttlistDecl.)

Requirements:
Perl

XML::DOM 1.44 keywords