WebKDC::XmlDoc

(Manipulate a document of WebKDC::XmlElement objects)

SYNOPSIS

    use WebKDC::XmlDoc;

    my $doc = WebKDC::XmlDoc->new;
    $doc->start ('root');
    $doc->start ('child', { key => 'value' }, 'some content');
    $doc->add ('subchild, 'more content');
    print $doc->current->name, "\n";
    $doc->end;
    $doc->end;
    print $doc->root->name, "\n";

DESCRIPTION

A WebKDC::XmlDoc represents an XML document as a tree of WebKDC::XmlElement objects. It is used internally by the WebKDC module to create and parse XML documents when talking to a WebAuth WebKDC.

A (non-empty) document has a root element and a stack of open elements. It is assembled by starting an element (with start(), possibly including attributes and content), manipulating that element if necessary, and then ending the element, done recursively. Once an element has been ended, there is no way using this interface to further change it, although it can be retrieved by getting the root of the tree with root() and then walking the tree. add() is an optimization that combines start() and end() and is more efficient if an element has no child elements.

Most manipulation of this document is done via the WebKDC::XmlElement methods, which allow parsing an XML document into this format, finding children of a particular element, and converting a document to its XML representation. This module only defines the top-level structure and the methods that have to be called on the document as a whole rather than on an individual element.

CLASS METHODS

new ()

Create a new, empty document. This document will have no root. The first element added with start() or add() will become the root of the document.

INSTANCE METHODS

add (NAME[, ATTRS[, CONTENT]])

Add a new element with name NAME as a child of the current element and immediately close it, equivalent to start() followed immediately by end(). Optional attributes (which should be an anonymous hash of names and values) and content (which should be a string) may be provided. To provide CONTENT without ATTRS, pass {} as ATTRS. Returns the WebKDC::XmlDoc object.

If the document is empty, the new element becomes the root.

current ()

Returns the current element as a WebKDC::XmlElement object. The current element is the most recent element opened by start() and not yet closed with end().

end ([NAME])

End the current element. If the optional NAME parameter is given, throw an exception and take no action if the current open element is not named NAME. Returns the WebKDC::XmlDoc object.

root ()

Returns the root WebKDC::XmlElement object of the document or undef if the document is empty. To convert the entire document to XML, use:

    my $xml = $doc->root->to_string;

(which uses the to_string() method of WebKDC::XmlElement).

start (NAME[, ATTRS[, CONTENT]])

Add a new element with name NAME as a child of the current element and make the new element the current element (so subsequent elements added by start() or add() will be children of it) until the next end(). Optional attributes (which should be an anonymous hash of names and values) and content (which should be a string) may be provided. To provide CONTENT without ATTRS, pass {} as ATTRS. Returns the WebKDC::XmlDoc object.

If the document is empty, the new element becomes the root.

AUTHOR

Roland Schemers and Russ Allbery <eagle@eyrie.org>

SEE ALSO

WebKDC(3), WebKDC::XmlElement(3)

This module is part of WebAuth. The current version is available from <http://webauth.stanford.edu/>.

Last spun 2015-02-17 from POD modified 2015-02-16