osgEarth 2.1.1
Public Member Functions | Private Attributes

TiXmlHandle Class Reference

#include <tinyxml.h>

Collaboration diagram for TiXmlHandle:

List of all members.

Public Member Functions

 TiXmlHandle (TiXmlNode *_node)
 Create a handle from any node (at any depth of the tree.) This can be a null pointer.
 TiXmlHandle (const TiXmlHandle &ref)
 Copy constructor.
TiXmlHandle operator= (const TiXmlHandle &ref)
TiXmlHandle FirstChild () const
 Return a handle to the first child node.
TiXmlHandle FirstChild (const char *value) const
 Return a handle to the first child node with the given name.
TiXmlHandle FirstChildElement () const
 Return a handle to the first child element.
TiXmlHandle FirstChildElement (const char *value) const
 Return a handle to the first child element with the given name.
TiXmlHandle Child (const char *value, int index) const
TiXmlHandle Child (int index) const
TiXmlHandle ChildElement (const char *value, int index) const
TiXmlHandle ChildElement (int index) const
TiXmlNodeToNode () const
TiXmlElementToElement () const
TiXmlTextToText () const
TiXmlUnknownToUnknown () const
TiXmlNodeNode () const
TiXmlElementElement () const
TiXmlTextText () const
TiXmlUnknownUnknown () const

Private Attributes

TiXmlNodenode

Detailed Description

A TiXmlHandle is a class that wraps a node pointer with null checks; this is an incredibly useful thing. Note that TiXmlHandle is not part of the TinyXml DOM structure. It is a separate utility class.

Take an example:

	<Document>
		<Element attributeA = "valueA">
			<Child attributeB = "value1" />
			<Child attributeB = "value2" />
		</Element>
	<Document>
	

Assuming you want the value of "attributeB" in the 2nd "Child" element, it's very easy to write a *lot* of code that looks like:

	TiXmlElement* root = document.FirstChildElement( "Document" );
	if ( root )
	{
		TiXmlElement* element = root->FirstChildElement( "Element" );
		if ( element )
		{
			TiXmlElement* child = element->FirstChildElement( "Child" );
			if ( child )
			{
				TiXmlElement* child2 = child->NextSiblingElement( "Child" );
				if ( child2 )
				{
					// Finally do something useful.
	

And that doesn't even cover "else" cases. TiXmlHandle addresses the verbosity of such code. A TiXmlHandle checks for null pointers so it is perfectly safe and correct to use:

	TiXmlHandle docHandle( &document );
	TiXmlElement* child2 = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).Child( "Child", 1 ).ToElement();
	if ( child2 )
	{
		// do something useful
	

Which is MUCH more concise and useful.

It is also safe to copy handles - internally they are nothing more than node pointers.

	TiXmlHandle handleCopy = handle;
	

What they should not be used for is iteration:

	int i=0; 
	while ( true )
	{
		TiXmlElement* child = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).Child( "Child", i ).ToElement();
		if ( !child )
			break;
		// do something
		++i;
	}
	

It seems reasonable, but it is in fact two embedded while loops. The Child method is a linear walk to find the element, so this code would iterate much more than it needs to. Instead, prefer:

	TiXmlElement* child = docHandle.FirstChild( "Document" ).FirstChild( "Element" ).FirstChild( "Child" ).ToElement();

	for( child; child; child=child->NextSiblingElement() )
	{
		// do something
	}
	

Definition at line 1631 of file tinyxml.h.


Constructor & Destructor Documentation

TiXmlHandle::TiXmlHandle ( TiXmlNode _node) [inline]

Create a handle from any node (at any depth of the tree.) This can be a null pointer.

Definition at line 1635 of file tinyxml.h.

{ this->node = _node; }

Here is the caller graph for this function:

TiXmlHandle::TiXmlHandle ( const TiXmlHandle ref) [inline]

Copy constructor.

Definition at line 1637 of file tinyxml.h.

{ this->node = ref.node; }

Member Function Documentation

TiXmlHandle TiXmlHandle::Child ( const char *  value,
int  index 
) const

Return a handle to the "index" child with the given name. The first child is 0, the second 1, etc.

Definition at line 1652 of file tinyxml.cpp.

{
        if ( node )
        {
                int i;
                TiXmlNode* child = node->FirstChild( value );
                for (   i=0;
                                child && i<count;
                                child = child->NextSibling( value ), ++i )
                {
                        // nothing
                }
                if ( child )
                        return TiXmlHandle( child );
        }
        return TiXmlHandle( 0 );
}

Here is the call graph for this function:

TiXmlHandle TiXmlHandle::Child ( int  index) const

Return a handle to the "index" child. The first child is 0, the second 1, etc.

Definition at line 1633 of file tinyxml.cpp.

{
        if ( node )
        {
                int i;
                TiXmlNode* child = node->FirstChild();
                for (   i=0;
                                child && i<count;
                                child = child->NextSibling(), ++i )
                {
                        // nothing
                }
                if ( child )
                        return TiXmlHandle( child );
        }
        return TiXmlHandle( 0 );
}

Here is the call graph for this function:

TiXmlHandle TiXmlHandle::ChildElement ( const char *  value,
int  index 
) const

Return a handle to the "index" child element with the given name. The first child element is 0, the second 1, etc. Note that only TiXmlElements are indexed: other types are not counted.

Definition at line 1690 of file tinyxml.cpp.

{
        if ( node )
        {
                int i;
                TiXmlElement* child = node->FirstChildElement( value );
                for (   i=0;
                                child && i<count;
                                child = child->NextSiblingElement( value ), ++i )
                {
                        // nothing
                }
                if ( child )
                        return TiXmlHandle( child );
        }
        return TiXmlHandle( 0 );
}

Here is the call graph for this function:

TiXmlHandle TiXmlHandle::ChildElement ( int  index) const

Return a handle to the "index" child element. The first child element is 0, the second 1, etc. Note that only TiXmlElements are indexed: other types are not counted.

Definition at line 1671 of file tinyxml.cpp.

{
        if ( node )
        {
                int i;
                TiXmlElement* child = node->FirstChildElement();
                for (   i=0;
                                child && i<count;
                                child = child->NextSiblingElement(), ++i )
                {
                        // nothing
                }
                if ( child )
                        return TiXmlHandle( child );
        }
        return TiXmlHandle( 0 );
}

Here is the call graph for this function:

TiXmlElement* TiXmlHandle::Element ( ) const [inline]
Deprecated:
use ToElement. Return the handle as a TiXmlElement. This may return null.

Definition at line 1696 of file tinyxml.h.

{ return ToElement(); }

Here is the call graph for this function:

TiXmlHandle TiXmlHandle::FirstChild ( const char *  value) const

Return a handle to the first child node with the given name.

Definition at line 1597 of file tinyxml.cpp.

{
        if ( node )
        {
                TiXmlNode* child = node->FirstChild( value );
                if ( child )
                        return TiXmlHandle( child );
        }
        return TiXmlHandle( 0 );
}

Here is the call graph for this function:

TiXmlHandle TiXmlHandle::FirstChild ( ) const

Return a handle to the first child node.

Definition at line 1585 of file tinyxml.cpp.

{
        if ( node )
        {
                TiXmlNode* child = node->FirstChild();
                if ( child )
                        return TiXmlHandle( child );
        }
        return TiXmlHandle( 0 );
}

Here is the call graph for this function:

TiXmlHandle TiXmlHandle::FirstChildElement ( ) const

Return a handle to the first child element.

Definition at line 1609 of file tinyxml.cpp.

{
        if ( node )
        {
                TiXmlElement* child = node->FirstChildElement();
                if ( child )
                        return TiXmlHandle( child );
        }
        return TiXmlHandle( 0 );
}

Here is the call graph for this function:

TiXmlHandle TiXmlHandle::FirstChildElement ( const char *  value) const

Return a handle to the first child element with the given name.

Definition at line 1621 of file tinyxml.cpp.

{
        if ( node )
        {
                TiXmlElement* child = node->FirstChildElement( value );
                if ( child )
                        return TiXmlHandle( child );
        }
        return TiXmlHandle( 0 );
}

Here is the call graph for this function:

TiXmlNode* TiXmlHandle::Node ( ) const [inline]
Deprecated:
use ToNode. Return the handle as a TiXmlNode. This may return null.

Definition at line 1692 of file tinyxml.h.

{ return ToNode(); } 

Here is the call graph for this function:

TiXmlHandle TiXmlHandle::operator= ( const TiXmlHandle ref) [inline]

Definition at line 1638 of file tinyxml.h.

{ this->node = ref.node; return *this; }
TiXmlText* TiXmlHandle::Text ( ) const [inline]
Deprecated:
use ToText() Return the handle as a TiXmlText. This may return null.

Definition at line 1700 of file tinyxml.h.

{ return ToText(); }

Here is the call graph for this function:

TiXmlElement* TiXmlHandle::ToElement ( ) const [inline]

Return the handle as a TiXmlElement. This may return null.

Definition at line 1681 of file tinyxml.h.

{ return ( ( node && node->ToElement() ) ? node->ToElement() : 0 ); }

Here is the caller graph for this function:

TiXmlNode* TiXmlHandle::ToNode ( ) const [inline]

Return the handle as a TiXmlNode. This may return null.

Definition at line 1678 of file tinyxml.h.

{ return node; } 

Here is the caller graph for this function:

TiXmlText* TiXmlHandle::ToText ( ) const [inline]

Return the handle as a TiXmlText. This may return null.

Definition at line 1684 of file tinyxml.h.

{ return ( ( node && node->ToText() ) ? node->ToText() : 0 ); }

Here is the caller graph for this function:

TiXmlUnknown* TiXmlHandle::ToUnknown ( ) const [inline]

Return the handle as a TiXmlUnknown. This may return null.

Definition at line 1687 of file tinyxml.h.

{ return ( ( node && node->ToUnknown() ) ? node->ToUnknown() : 0 ); }

Here is the caller graph for this function:

TiXmlUnknown* TiXmlHandle::Unknown ( ) const [inline]
Deprecated:
use ToUnknown() Return the handle as a TiXmlUnknown. This may return null.

Definition at line 1704 of file tinyxml.h.

{ return ToUnknown(); }

Here is the call graph for this function:


Member Data Documentation

Definition at line 1707 of file tinyxml.h.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines