19 #include "itkPSMDOMNodeXMLReader.h" 32 static void itkXMLParserStartElement(
void* parser,
const char* name,
const char** atts )
37 static_cast<PSMDOMNodeXMLReader*
>(parser)->StartElement( name, atts );
40 static void itkXMLParserEndElement(
void* parser,
const char* name )
44 static_cast<PSMDOMNodeXMLReader*
>(parser)->EndElement( name );
47 static void itkXMLParserCharacterDataHandler(
void* parser,
const char* data,
int length )
52 static_cast<PSMDOMNodeXMLReader*
>(parser)->CharacterDataHandler( data, length );
55 PSMDOMNodeXMLReader::PSMDOMNodeXMLReader() : m_Context(NULL)
69 DOMNodePointer
object = DOMNodeType::New();
71 this->SetDOMNode( output );
74 output->RemoveAllAttributesAndChildren();
75 this->m_Context = NULL;
90 XML_Parser parser = XML_ParserCreate( 0 );
91 XML_SetElementHandler( parser, &itkXMLParserStartElement, &itkXMLParserEndElement );
92 XML_SetCharacterDataHandler( parser, &itkXMLParserCharacterDataHandler );
93 XML_SetUserData( parser,
this );
95 bool ok = XML_Parse( parser, s.data(), s.size(), false );
98 ExceptionObject e( __FILE__, __LINE__ );
99 std::string message( XML_ErrorString(XML_GetErrorCode(parser)) );
100 e.SetDescription( message.c_str() );
104 XML_ParserFree( parser );
113 std::ifstream is( this->m_FileName.c_str() );
116 itkExceptionMacro(
"failed openning the input XML file" );
131 if ( this->m_Context )
133 DOMNodePointer node1 = DOMNodeType::New();
135 this->m_Context->AddChildAtEnd( node );
139 node = this->GetDOMNode();
141 node->SetName( name );
146 std::string key( atts[i++] );
147 std::string value( atts[i++] );
148 if ( StringTools::MatchWith(key,
"id") )
150 node->SetID( value );
154 node->SetAttribute( key, value );
158 this->m_Context = node;
167 if ( this->m_Context->GetName() != name )
169 itkExceptionMacro(
"start/end tag names mismatch" );
171 this->m_Context =
dynamic_cast<PSMDOMNode *
>(this->m_Context->GetParent());
180 std::string s( text, len );
182 StringTools::Trim( s );
188 this->m_Context->AddText(s);
virtual void CharacterDataHandler(const char *text, int len)
Class to represent a node in the PSM Document Object Model (DOM) tree structure.
virtual void EndElement(const char *name)
virtual void StartElement(const char *name, const char **atts)