DD4hep  1.30.0
Detector Description Toolkit for High Energy Physics
Public Member Functions | Private Attributes | List of all members
TiXmlHandle_t Class Reference

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

#include <tinyxml.h>

Public Member Functions

 TiXmlHandle_t (TiXmlNode *_node)
 Create a handle from any node (at any depth of the tree.) This can be a null pointer. More...
 
 TiXmlHandle_t (const TiXmlHandle_t &ref)
 Copy constructor. More...
 
TiXmlHandle_t operator= (const TiXmlHandle_t &ref)
 
TiXmlHandle_t FirstChild () const
 Return a handle to the first child node. More...
 
TiXmlHandle_t FirstChild (const char *value) const
 Return a handle to the first child node with the given name. More...
 
TiXmlHandle_t FirstChildElement () const
 Return a handle to the first child element. More...
 
TiXmlHandle_t FirstChildElement (const char *value) const
 Return a handle to the first child element with the given name. More...
 
TiXmlHandle_t Child (const char *value, int index) const
 
TiXmlHandle_t Child (int index) const
 
TiXmlHandle_t ChildElement (const char *value, int index) const
 
TiXmlHandle_t ChildElement (int index) const
 
TiXmlHandle_t FirstChild (const std::string &_value) const
 
TiXmlHandle_t FirstChildElement (const std::string &_value) const
 
TiXmlHandle_t Child (const std::string &_value, int index) const
 
TiXmlHandle_t 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_t is a class that wraps a node pointer with null checks; this is an incredibly useful thing. Note that TiXmlHandle_t 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_t addresses the verbosity of such code. A TiXmlHandle_t checks for null pointers so it is perfectly safe and correct to use:

TiXmlHandle_t docHandle_t( &document );
TiXmlElement* child2 = docHandle_t.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_t handleCopy = handle;

What they should not be used for is iteration:

int i=0;
while ( true )
{
TiXmlElement* child = docHandle_t.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_t.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 1818 of file tinyxml.h.

Constructor & Destructor Documentation

◆ TiXmlHandle_t() [1/2]

TiXmlHandle_t::TiXmlHandle_t ( TiXmlNode _node)
inline

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

Definition at line 1821 of file tinyxml.h.

◆ TiXmlHandle_t() [2/2]

TiXmlHandle_t::TiXmlHandle_t ( const TiXmlHandle_t ref)
inline

Copy constructor.

Definition at line 1825 of file tinyxml.h.

Member Function Documentation

◆ Child() [1/3]

TiXmlHandle_t TiXmlHandle_t::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 1726 of file tinyxml_inl.h.

◆ Child() [2/3]

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

Definition at line 1869 of file tinyxml.h.

◆ Child() [3/3]

TiXmlHandle_t TiXmlHandle_t::Child ( int  index) const

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

Definition at line 1707 of file tinyxml_inl.h.

◆ ChildElement() [1/3]

TiXmlHandle_t TiXmlHandle_t::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 1764 of file tinyxml_inl.h.

◆ ChildElement() [2/3]

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

Definition at line 1872 of file tinyxml.h.

◆ ChildElement() [3/3]

TiXmlHandle_t TiXmlHandle_t::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 1745 of file tinyxml_inl.h.

◆ Element()

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

Definition at line 1907 of file tinyxml.h.

◆ FirstChild() [1/3]

TiXmlHandle_t TiXmlHandle_t::FirstChild ( ) const

Return a handle to the first child node.

Definition at line 1659 of file tinyxml_inl.h.

◆ FirstChild() [2/3]

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

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

Definition at line 1671 of file tinyxml_inl.h.

◆ FirstChild() [3/3]

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

Definition at line 1862 of file tinyxml.h.

◆ FirstChildElement() [1/3]

TiXmlHandle_t TiXmlHandle_t::FirstChildElement ( ) const

Return a handle to the first child element.

Definition at line 1683 of file tinyxml_inl.h.

◆ FirstChildElement() [2/3]

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

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

Definition at line 1695 of file tinyxml_inl.h.

◆ FirstChildElement() [3/3]

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

Definition at line 1865 of file tinyxml.h.

◆ Node()

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

Definition at line 1901 of file tinyxml.h.

◆ operator=()

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

Definition at line 1828 of file tinyxml.h.

◆ Text()

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

Definition at line 1913 of file tinyxml.h.

◆ ToElement()

TiXmlElement* TiXmlHandle_t::ToElement ( ) const
inline

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

Definition at line 1884 of file tinyxml.h.

◆ ToNode()

TiXmlNode* TiXmlHandle_t::ToNode ( ) const
inline

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

Definition at line 1879 of file tinyxml.h.

◆ ToText()

TiXmlText* TiXmlHandle_t::ToText ( ) const
inline

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

Definition at line 1889 of file tinyxml.h.

◆ ToUnknown()

TiXmlUnknown* TiXmlHandle_t::ToUnknown ( ) const
inline

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

Definition at line 1894 of file tinyxml.h.

◆ Unknown()

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

Definition at line 1919 of file tinyxml.h.

Member Data Documentation

◆ node

TiXmlNode* TiXmlHandle_t::node
private

Definition at line 1924 of file tinyxml.h.


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