Looks good. I have only looked at the dom stuff so far. Why are you storing information in _private? What goes in there that could not be extracted when the nodes are accessed? It seems like a lot of unnecessary overhead.
Here are some suggestions... 1) parse_file could be class parse_file { public: parse_file( const std::string & ) : {} ... }; template<...> class basic_document { public: basic_document( const parse_file & ); } 2) How about parse_string (based on xmlParseMemory)? 3) Why dom::basic_document::clone? Why not have the copy constructor and assignment operator should do a deep copy of the document? This is consistent with other containers. If you want to stick with clone return an auto_ptr and and derive basic_document from boost::noncopyable. 4) How about something like class basic_document { public: ... typedef node_iterator iterator; typedef const_node_iterator const_iterator; iterator begin() { return iterator( ptr_->children ); } const_iterator begin() const { return const_iterator( ptr_->children ); } iterator end() { return iterator(); } const_iterator end() const { return const_iterator(); } iterator root() { return iterator( xmlDocGetRootElement( ptr_ ) ); } const_iterator root() const { return const_iterator( xmlDocGetRootElement( ptr_ ) ); } }; 5) basic_xpath and basic_xpath_result should be derived from boost::noncopyable 6) Leading _ chars are a no no (reserved for compiler implementors). I know _private is defined in libxml2, but what you see below is not... $ grep ' _' * basic_attribute.h:#ifndef _dom_basic_attribute_h basic_attribute.h:#define _dom_basic_attribute_h basic_comment.h:#ifndef _dom_basic_comment_h basic_comment.h:#define _dom_basic_comment_h basic_document.h:#ifndef _dom_basic_document_h basic_document.h:#define _dom_basic_document_h basic_dtd.h:#ifndef _dom_basic_dtd_h basic_dtd.h:#define _dom_basic_dtd_h basic_element.h:#ifndef _dom_basic_element_h basic_element.h:#define _dom_basic_element_h basic_node.h:#ifndef _dom_basic_node_h basic_node.h:#define _dom_basic_node_h basic_node.h: basic_node_iterator(impl *current = 0) : _current(current) {} basic_node.h: bool operator == (self i) { return _current == i._current;} basic_node.h: void increment() { _current = _current->next;} basic_node.h: void decrement() { _current = _current->prev;} basic_node.h: basic_node_const_iterator(const impl *current = 0) : _current(current) {} basic_node.h: bool operator == (self i) { return _current == i._current;} basic_node.h: void increment() { _current = _current->next;} basic_node.h: void decrement() { _current = _current->prev;} basic_pi.h:#ifndef _dom_basic_pi_h basic_pi.h:#define _dom_basic_pi_h basic_text.h:#ifndef _dom_basic_text_h basic_text.h:#define _dom_basic_text_h basic_traversal.h:#ifndef _dom_basic_traversal_h basic_traversal.h:#define _dom_basic_traversal_h Hamish On Thu, 2003-06-12 at 03:45, Stefan Seefeld wrote: > hi there, > > following some discussion we had some weeks ago, > I'd like to invite everybody to review xml++.tgz at > > http://groups.yahoo.com/group/boost/files/xml/ > > It's a DOM-like and a SAX-like API currently implemented > on top of libxml2 (http://www.xmlsoft.org). > > What it provides: > > * parsing of xml files and creation of a document tree > * manipulation of document tree, i.e. insertion and > deletion of nodes > * node iteration, search (xpath based) > * document output to a (xml) file > > * event driven xml file parsing (sax) > > To be added: > > * validation (dtd, schema, etc.) > * ? > > Is there any interest in this library evolving > into a boost::xml library ? If so, what needs to change, > what needs to be added / removed ? > > Regards, > Stefan > > _______________________________________________ > Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost -- Hamish Mackenzie <[EMAIL PROTECTED]> _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost