DD4hep - The AIDA detector description toolkit for high energy physics experiments
DD4hep  Rev:Unversioneddirectory
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | Private Attributes | List of all members
TiXmlHandle Class Reference

TinyXML class. See http://www.grinninglizard.com/tinyxml. More...

#include <tinyxml.h>

Public Member Functions

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

Private Attributes

TiXmlNodenode
 

Detailed Description

TinyXML class. See http://www.grinninglizard.com/tinyxml.

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
}

See

See Also
http://www.grinninglizard.com/tinyxml

Definition at line 1815 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 1818 of file tinyxml.h.

References node.

Referenced by Child(), ChildElement(), FirstChild(), and FirstChildElement().

TiXmlHandle::TiXmlHandle ( const TiXmlHandle ref)
inline

Copy constructor.

Definition at line 1822 of file tinyxml.h.

References 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 1723 of file tinyxml_inl.h.

References TiXmlNode::NextSibling(), and TiXmlHandle().

Referenced by Child().

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 1704 of file tinyxml_inl.h.

References TiXmlNode::NextSibling(), and TiXmlHandle().

TiXmlHandle TiXmlHandle::Child ( const std::string &  _value,
int  index 
) const
inline

Definition at line 1866 of file tinyxml.h.

References Child().

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 1761 of file tinyxml_inl.h.

References TiXmlNode::NextSiblingElement(), and TiXmlHandle().

Referenced by ChildElement().

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 1742 of file tinyxml_inl.h.

References TiXmlNode::NextSiblingElement(), and TiXmlHandle().

TiXmlHandle TiXmlHandle::ChildElement ( const std::string &  _value,
int  index 
) const
inline

Definition at line 1869 of file tinyxml.h.

References ChildElement().

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

Definition at line 1904 of file tinyxml.h.

References ToElement().

TiXmlHandle TiXmlHandle::FirstChild ( ) const

Return a handle to the first child node.

Definition at line 1656 of file tinyxml_inl.h.

References TiXmlHandle().

Referenced by FirstChild().

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

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

Definition at line 1668 of file tinyxml_inl.h.

References TiXmlHandle().

TiXmlHandle TiXmlHandle::FirstChild ( const std::string &  _value) const
inline

Definition at line 1859 of file tinyxml.h.

References FirstChild().

TiXmlHandle TiXmlHandle::FirstChildElement ( ) const

Return a handle to the first child element.

Definition at line 1680 of file tinyxml_inl.h.

References TiXmlHandle().

Referenced by FirstChildElement().

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

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

Definition at line 1692 of file tinyxml_inl.h.

References TiXmlHandle().

TiXmlHandle TiXmlHandle::FirstChildElement ( const std::string &  _value) const
inline

Definition at line 1862 of file tinyxml.h.

References FirstChildElement().

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

Definition at line 1898 of file tinyxml.h.

References ToNode().

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

Definition at line 1825 of file tinyxml.h.

References node.

TiXmlText* TiXmlHandle::Text ( ) const
inline
Deprecated:
use ToText() Return the handle as a TiXmlText. This may return null.

Definition at line 1910 of file tinyxml.h.

References ToText().

TiXmlElement* TiXmlHandle::ToElement ( ) const
inline

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

Definition at line 1881 of file tinyxml.h.

References node, and TiXmlNode::ToElement().

Referenced by Element().

TiXmlNode* TiXmlHandle::ToNode ( ) const
inline

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

Definition at line 1876 of file tinyxml.h.

References node.

Referenced by Node().

TiXmlText* TiXmlHandle::ToText ( ) const
inline

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

Definition at line 1886 of file tinyxml.h.

References node, and TiXmlNode::ToText().

Referenced by Text().

TiXmlUnknown* TiXmlHandle::ToUnknown ( ) const
inline

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

Definition at line 1891 of file tinyxml.h.

References node, and TiXmlNode::ToUnknown().

Referenced by Unknown().

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

Definition at line 1916 of file tinyxml.h.

References ToUnknown().

Member Data Documentation

TiXmlNode* TiXmlHandle::node
private

Definition at line 1921 of file tinyxml.h.

Referenced by operator=(), TiXmlHandle(), ToElement(), ToNode(), ToText(), and ToUnknown().


The documentation for this class was generated from the following files: