---
name: "XML::Generator::DOM"
section: "3pm"
platform: "linux"
package: "libxml-generator-perl"
version: "1.13-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/XML::Generator::DOM/3pm"
---

# XML::Generator::DOM(3pm)

XML::Generator subclass for producing DOM trees instead of strings.

## NAME

XML::Generator::DOM - XML::Generator subclass for producing DOM trees instead of strings.

## SYNOPSIS

```
        use XML::Generator::DOM;
        my $dg  = XML::Generator::DOM->new();
        my $doc = $dg->xml($dg->xmlcmnt("Test document."),
                           $dg->foo({'baz' => 'bam'}, 42));
        print $doc->toString;
```

yields:

```
        <?xml version="1.0" standalone="yes"?>
        <!--Test document-->
        <foo baz="bam">42</foo>
```

## DESCRIPTION

XML::Generator::DOM subclasses XML::Generator in order to produce DOM trees instead of strings (see XML::Generator and XML::DOM).  This module is still experimental and its semantics might change.

Essentially, tag methods return XML::DOM::DocumentFragment objects, constructed either from a DOM document passed into the constructor or a default document that XML::Generator::DOM will automatically construct.

Calling the **xml()** method will return this automatically constructed document and cause a fresh one to be constructed for future tag method calls.  If you passed in your own document, you may not call the **xml()** method.

Below, we just note the remaining differences in semantics between XML::Generator methods and XML::Generator::DOM methods.

## LICENSE

This library is free software, you can redistribute it and/or modify it under the same terms as Perl itself.

## CONSTRUCTOR

These configuration options are accepted but have no effect on the semantics of the returned object: escape, pretty, conformance and empty.

## TAG METHODS

Subsequently, tag method semantics are somewhat different for this module compared to XML::Generator.  The primary difference is that tag method return XML::DOM::DocumentFragment objects.  Namespace and attribute processing remains the same, but remaining arguments to tag methods must either be text or other XML::DOM::DocumentFragment objects.  No escape processing, syntax checking, or output control is done; this is all left up to XML::DOM.

## SPECIAL TAGS

All special tags are available by default with XML::Generator::DOM; you don't need to use 'conformance' =\> 'strict'.

### xmlpi(@args)

Arguments will simply be concatenated and passed as the data to the XML::DOM::ProcessingInstruction object that is returned.

### xmlcmnt

Escaping of '--' is done by XML::DOM::Comment, which replaces both hyphens with '&#45;'.  An XML::DOM::Comment object is returned.

### xmldecl

Returns an XML::DOM::XMLDecl object.  Respects 'version', 'encoding' and 'dtd' settings in the object.

### xmldecl

Returns an XML::DOM::DocumentType object.

### xmlcdata

Returns an XML::DOM::CDATASection object.

### xml

As described above, **xml()** can only be used when dom\_document was not set in the object.  The automatically created document will have its XML Declaration set and the arguments to **xml()** will be appended to it.  Then a new DOM document is automatically generated and the old one is returned.  This is the only way to get a DOM document from this module.
