From 0a97bad6608a2b1ea01ae6ce18bab63abf0c9210 Mon Sep 17 00:00:00 2001
From: "arseny.kapoulkine"
 
Date: Wed, 21 Feb 2007 19:41:31 +0000
Subject: Merged 0.3 in trunk
git-svn-id: http://pugixml.googlecode.com/svn/trunk@68 99668b35-9821-0410-8761-19e4c4f06640
---
 docs/html/annotated.html                           |   37 +
 docs/html/classpugi_1_1xml__attribute-members.html |   52 +
 docs/html/classpugi_1_1xml__attribute.html         |  881 ++++
 .../classpugi_1_1xml__attribute__coll__graph.map   |    1 +
 .../classpugi_1_1xml__attribute__coll__graph.md5   |    1 +
 .../classpugi_1_1xml__attribute__coll__graph.png   |  Bin 0 -> 876 bytes
 ...sspugi_1_1xml__attribute__iterator-members.html |   37 +
 .../classpugi_1_1xml__attribute__iterator.html     |  414 ++
 ...gi_1_1xml__attribute__iterator__coll__graph.map |    2 +
 ...gi_1_1xml__attribute__iterator__coll__graph.md5 |    1 +
 ...gi_1_1xml__attribute__iterator__coll__graph.png |  Bin 0 -> 3027 bytes
 ...1_1xml__attribute__iterator__inherit__graph.map |    1 +
 ...1_1xml__attribute__iterator__inherit__graph.md5 |    1 +
 ...1_1xml__attribute__iterator__inherit__graph.png |  Bin 0 -> 1386 bytes
 docs/html/classpugi_1_1xml__document-members.html  |  103 +
 docs/html/classpugi_1_1xml__document.html          |  365 ++
 .../classpugi_1_1xml__document__coll__graph.map    |    2 +
 .../classpugi_1_1xml__document__coll__graph.md5    |    1 +
 .../classpugi_1_1xml__document__coll__graph.png    |  Bin 0 -> 2396 bytes
 .../classpugi_1_1xml__document__inherit__graph.map |    2 +
 .../classpugi_1_1xml__document__inherit__graph.md5 |    1 +
 .../classpugi_1_1xml__document__inherit__graph.png |  Bin 0 -> 697 bytes
 docs/html/classpugi_1_1xml__node-members.html      |   95 +
 docs/html/classpugi_1_1xml__node.html              | 2473 +++++++++++
 docs/html/classpugi_1_1xml__node__coll__graph.map  |    1 +
 docs/html/classpugi_1_1xml__node__coll__graph.md5  |    1 +
 docs/html/classpugi_1_1xml__node__coll__graph.png  |  Bin 0 -> 756 bytes
 .../classpugi_1_1xml__node__inherit__graph.map     |    2 +
 .../classpugi_1_1xml__node__inherit__graph.md5     |    1 +
 .../classpugi_1_1xml__node__inherit__graph.png     |  Bin 0 -> 704 bytes
 .../classpugi_1_1xml__node__iterator-members.html  |   37 +
 docs/html/classpugi_1_1xml__node__iterator.html    |  414 ++
 ...asspugi_1_1xml__node__iterator__coll__graph.map |    2 +
 ...asspugi_1_1xml__node__iterator__coll__graph.md5 |    1 +
 ...asspugi_1_1xml__node__iterator__coll__graph.png |  Bin 0 -> 2813 bytes
 ...pugi_1_1xml__node__iterator__inherit__graph.map |    1 +
 ...pugi_1_1xml__node__iterator__inherit__graph.md5 |    1 +
 ...pugi_1_1xml__node__iterator__inherit__graph.png |  Bin 0 -> 1300 bytes
 .../classpugi_1_1xml__tree__walker-members.html    |   32 +
 docs/html/classpugi_1_1xml__tree__walker.html      |  186 +
 ...classpugi_1_1xml__tree__walker__coll__graph.map |    1 +
 ...classpugi_1_1xml__tree__walker__coll__graph.md5 |    1 +
 ...classpugi_1_1xml__tree__walker__coll__graph.png |  Bin 0 -> 738 bytes
 .../classpugi_1_1xpath__exception-members.html     |   27 +
 docs/html/classpugi_1_1xpath__exception.html       |  108 +
 .../classpugi_1_1xpath__exception__coll__graph.map |    1 +
 .../classpugi_1_1xpath__exception__coll__graph.md5 |    1 +
 .../classpugi_1_1xpath__exception__coll__graph.png |  Bin 0 -> 1442 bytes
 ...asspugi_1_1xpath__exception__inherit__graph.map |    1 +
 ...asspugi_1_1xpath__exception__inherit__graph.md5 |    1 +
 ...asspugi_1_1xpath__exception__inherit__graph.png |  Bin 0 -> 764 bytes
 docs/html/classpugi_1_1xpath__node-members.html    |   34 +
 docs/html/classpugi_1_1xpath__node.html            |  341 ++
 .../html/classpugi_1_1xpath__node__coll__graph.map |    3 +
 .../html/classpugi_1_1xpath__node__coll__graph.md5 |    1 +
 .../html/classpugi_1_1xpath__node__coll__graph.png |  Bin 0 -> 2333 bytes
 .../classpugi_1_1xpath__node__set-members.html     |   42 +
 docs/html/classpugi_1_1xpath__node__set.html       |  413 ++
 .../classpugi_1_1xpath__node__set__coll__graph.map |    4 +
 .../classpugi_1_1xpath__node__set__coll__graph.md5 |    1 +
 .../classpugi_1_1xpath__node__set__coll__graph.png |  Bin 0 -> 4399 bytes
 docs/html/classpugi_1_1xpath__query-members.html   |   31 +
 docs/html/classpugi_1_1xpath__query.html           |  239 +
 .../classpugi_1_1xpath__query__coll__graph.map     |    1 +
 .../classpugi_1_1xpath__query__coll__graph.md5     |    1 +
 .../classpugi_1_1xpath__query__coll__graph.png     |  Bin 0 -> 1519 bytes
 docs/html/doxygen.css                              |  310 ++
 docs/html/doxygen.png                              |  Bin 0 -> 1281 bytes
 docs/html/functions.html                           |  195 +
 docs/html/functions_enum.html                      |   38 +
 docs/html/functions_eval.html                      |   40 +
 docs/html/functions_func.html                      |  188 +
 docs/html/functions_type.html                      |   40 +
 docs/html/graph_legend.dot                         |   22 +
 docs/html/graph_legend.html                        |   80 +
 docs/html/graph_legend.png                         |  Bin 0 -> 3938 bytes
 docs/html/hierarchy.html                           |   45 +
 docs/html/index.html                               |   20 +
 docs/html/inherit__graph__0.map                    |    2 +
 docs/html/inherit__graph__0.md5                    |    1 +
 docs/html/inherit__graph__0.png                    |  Bin 0 -> 582 bytes
 docs/html/inherit__graph__1.map                    |    2 +
 docs/html/inherit__graph__1.md5                    |    1 +
 docs/html/inherit__graph__1.png                    |  Bin 0 -> 428 bytes
 docs/html/inherit__graph__2.map                    |    3 +
 docs/html/inherit__graph__2.md5                    |    1 +
 docs/html/inherit__graph__2.png                    |  Bin 0 -> 1068 bytes
 docs/html/inherit__graph__3.map                    |    3 +
 docs/html/inherit__graph__3.md5                    |    1 +
 docs/html/inherit__graph__3.png                    |  Bin 0 -> 596 bytes
 docs/html/inherit__graph__4.map                    |    2 +
 docs/html/inherit__graph__4.md5                    |    1 +
 docs/html/inherit__graph__4.png                    |  Bin 0 -> 485 bytes
 docs/html/inherit__graph__5.map                    |    2 +
 docs/html/inherit__graph__5.md5                    |    1 +
 docs/html/inherit__graph__5.png                    |  Bin 0 -> 644 bytes
 docs/html/inherit__graph__6.map                    |    2 +
 docs/html/inherit__graph__6.md5                    |    1 +
 docs/html/inherit__graph__6.png                    |  Bin 0 -> 404 bytes
 docs/html/inherit__graph__7.map                    |    2 +
 docs/html/inherit__graph__7.md5                    |    1 +
 docs/html/inherit__graph__7.png                    |  Bin 0 -> 470 bytes
 docs/html/inherit__graph__8.map                    |    2 +
 docs/html/inherit__graph__8.md5                    |    1 +
 docs/html/inherit__graph__8.png                    |  Bin 0 -> 437 bytes
 docs/html/inherits.html                            |   66 +
 docs/html/namespacemembers.html                    |   62 +
 docs/html/namespacemembers_enum.html               |   37 +
 docs/html/namespacemembers_eval.html               |   43 +
 docs/html/namespacemembers_func.html               |   38 +
 docs/html/namespacemembers_vars.html               |   52 +
 docs/html/namespacepugi.html                       |  668 +++
 docs/html/namespaces.html                          |   26 +
 .../structpugi_1_1transfer__ownership__tag.html    |   35 +
 docs/html/tab_b.gif                                |  Bin 0 -> 35 bytes
 docs/html/tab_l.gif                                |  Bin 0 -> 706 bytes
 docs/html/tab_r.gif                                |  Bin 0 -> 2585 bytes
 docs/html/tabs.css                                 |  102 +
 docs/index.html                                    | 1059 ++---
 src/pugiconfig.hpp                                 |   23 +
 src/pugixml.cpp                                    | 4697 +++++++++++---------
 src/pugixml.hpp                                    | 2399 +++++++---
 src/pugixpath.cpp                                  | 3537 +++++++++++++++
 123 files changed, 16700 insertions(+), 3552 deletions(-)
 create mode 100644 docs/html/annotated.html
 create mode 100644 docs/html/classpugi_1_1xml__attribute-members.html
 create mode 100644 docs/html/classpugi_1_1xml__attribute.html
 create mode 100644 docs/html/classpugi_1_1xml__attribute__coll__graph.map
 create mode 100644 docs/html/classpugi_1_1xml__attribute__coll__graph.md5
 create mode 100644 docs/html/classpugi_1_1xml__attribute__coll__graph.png
 create mode 100644 docs/html/classpugi_1_1xml__attribute__iterator-members.html
 create mode 100644 docs/html/classpugi_1_1xml__attribute__iterator.html
 create mode 100644 docs/html/classpugi_1_1xml__attribute__iterator__coll__graph.map
 create mode 100644 docs/html/classpugi_1_1xml__attribute__iterator__coll__graph.md5
 create mode 100644 docs/html/classpugi_1_1xml__attribute__iterator__coll__graph.png
 create mode 100644 docs/html/classpugi_1_1xml__attribute__iterator__inherit__graph.map
 create mode 100644 docs/html/classpugi_1_1xml__attribute__iterator__inherit__graph.md5
 create mode 100644 docs/html/classpugi_1_1xml__attribute__iterator__inherit__graph.png
 create mode 100644 docs/html/classpugi_1_1xml__document-members.html
 create mode 100644 docs/html/classpugi_1_1xml__document.html
 create mode 100644 docs/html/classpugi_1_1xml__document__coll__graph.map
 create mode 100644 docs/html/classpugi_1_1xml__document__coll__graph.md5
 create mode 100644 docs/html/classpugi_1_1xml__document__coll__graph.png
 create mode 100644 docs/html/classpugi_1_1xml__document__inherit__graph.map
 create mode 100644 docs/html/classpugi_1_1xml__document__inherit__graph.md5
 create mode 100644 docs/html/classpugi_1_1xml__document__inherit__graph.png
 create mode 100644 docs/html/classpugi_1_1xml__node-members.html
 create mode 100644 docs/html/classpugi_1_1xml__node.html
 create mode 100644 docs/html/classpugi_1_1xml__node__coll__graph.map
 create mode 100644 docs/html/classpugi_1_1xml__node__coll__graph.md5
 create mode 100644 docs/html/classpugi_1_1xml__node__coll__graph.png
 create mode 100644 docs/html/classpugi_1_1xml__node__inherit__graph.map
 create mode 100644 docs/html/classpugi_1_1xml__node__inherit__graph.md5
 create mode 100644 docs/html/classpugi_1_1xml__node__inherit__graph.png
 create mode 100644 docs/html/classpugi_1_1xml__node__iterator-members.html
 create mode 100644 docs/html/classpugi_1_1xml__node__iterator.html
 create mode 100644 docs/html/classpugi_1_1xml__node__iterator__coll__graph.map
 create mode 100644 docs/html/classpugi_1_1xml__node__iterator__coll__graph.md5
 create mode 100644 docs/html/classpugi_1_1xml__node__iterator__coll__graph.png
 create mode 100644 docs/html/classpugi_1_1xml__node__iterator__inherit__graph.map
 create mode 100644 docs/html/classpugi_1_1xml__node__iterator__inherit__graph.md5
 create mode 100644 docs/html/classpugi_1_1xml__node__iterator__inherit__graph.png
 create mode 100644 docs/html/classpugi_1_1xml__tree__walker-members.html
 create mode 100644 docs/html/classpugi_1_1xml__tree__walker.html
 create mode 100644 docs/html/classpugi_1_1xml__tree__walker__coll__graph.map
 create mode 100644 docs/html/classpugi_1_1xml__tree__walker__coll__graph.md5
 create mode 100644 docs/html/classpugi_1_1xml__tree__walker__coll__graph.png
 create mode 100644 docs/html/classpugi_1_1xpath__exception-members.html
 create mode 100644 docs/html/classpugi_1_1xpath__exception.html
 create mode 100644 docs/html/classpugi_1_1xpath__exception__coll__graph.map
 create mode 100644 docs/html/classpugi_1_1xpath__exception__coll__graph.md5
 create mode 100644 docs/html/classpugi_1_1xpath__exception__coll__graph.png
 create mode 100644 docs/html/classpugi_1_1xpath__exception__inherit__graph.map
 create mode 100644 docs/html/classpugi_1_1xpath__exception__inherit__graph.md5
 create mode 100644 docs/html/classpugi_1_1xpath__exception__inherit__graph.png
 create mode 100644 docs/html/classpugi_1_1xpath__node-members.html
 create mode 100644 docs/html/classpugi_1_1xpath__node.html
 create mode 100644 docs/html/classpugi_1_1xpath__node__coll__graph.map
 create mode 100644 docs/html/classpugi_1_1xpath__node__coll__graph.md5
 create mode 100644 docs/html/classpugi_1_1xpath__node__coll__graph.png
 create mode 100644 docs/html/classpugi_1_1xpath__node__set-members.html
 create mode 100644 docs/html/classpugi_1_1xpath__node__set.html
 create mode 100644 docs/html/classpugi_1_1xpath__node__set__coll__graph.map
 create mode 100644 docs/html/classpugi_1_1xpath__node__set__coll__graph.md5
 create mode 100644 docs/html/classpugi_1_1xpath__node__set__coll__graph.png
 create mode 100644 docs/html/classpugi_1_1xpath__query-members.html
 create mode 100644 docs/html/classpugi_1_1xpath__query.html
 create mode 100644 docs/html/classpugi_1_1xpath__query__coll__graph.map
 create mode 100644 docs/html/classpugi_1_1xpath__query__coll__graph.md5
 create mode 100644 docs/html/classpugi_1_1xpath__query__coll__graph.png
 create mode 100644 docs/html/doxygen.css
 create mode 100644 docs/html/doxygen.png
 create mode 100644 docs/html/functions.html
 create mode 100644 docs/html/functions_enum.html
 create mode 100644 docs/html/functions_eval.html
 create mode 100644 docs/html/functions_func.html
 create mode 100644 docs/html/functions_type.html
 create mode 100644 docs/html/graph_legend.dot
 create mode 100644 docs/html/graph_legend.html
 create mode 100644 docs/html/graph_legend.png
 create mode 100644 docs/html/hierarchy.html
 create mode 100644 docs/html/index.html
 create mode 100644 docs/html/inherit__graph__0.map
 create mode 100644 docs/html/inherit__graph__0.md5
 create mode 100644 docs/html/inherit__graph__0.png
 create mode 100644 docs/html/inherit__graph__1.map
 create mode 100644 docs/html/inherit__graph__1.md5
 create mode 100644 docs/html/inherit__graph__1.png
 create mode 100644 docs/html/inherit__graph__2.map
 create mode 100644 docs/html/inherit__graph__2.md5
 create mode 100644 docs/html/inherit__graph__2.png
 create mode 100644 docs/html/inherit__graph__3.map
 create mode 100644 docs/html/inherit__graph__3.md5
 create mode 100644 docs/html/inherit__graph__3.png
 create mode 100644 docs/html/inherit__graph__4.map
 create mode 100644 docs/html/inherit__graph__4.md5
 create mode 100644 docs/html/inherit__graph__4.png
 create mode 100644 docs/html/inherit__graph__5.map
 create mode 100644 docs/html/inherit__graph__5.md5
 create mode 100644 docs/html/inherit__graph__5.png
 create mode 100644 docs/html/inherit__graph__6.map
 create mode 100644 docs/html/inherit__graph__6.md5
 create mode 100644 docs/html/inherit__graph__6.png
 create mode 100644 docs/html/inherit__graph__7.map
 create mode 100644 docs/html/inherit__graph__7.md5
 create mode 100644 docs/html/inherit__graph__7.png
 create mode 100644 docs/html/inherit__graph__8.map
 create mode 100644 docs/html/inherit__graph__8.md5
 create mode 100644 docs/html/inherit__graph__8.png
 create mode 100644 docs/html/inherits.html
 create mode 100644 docs/html/namespacemembers.html
 create mode 100644 docs/html/namespacemembers_enum.html
 create mode 100644 docs/html/namespacemembers_eval.html
 create mode 100644 docs/html/namespacemembers_func.html
 create mode 100644 docs/html/namespacemembers_vars.html
 create mode 100644 docs/html/namespacepugi.html
 create mode 100644 docs/html/namespaces.html
 create mode 100644 docs/html/structpugi_1_1transfer__ownership__tag.html
 create mode 100644 docs/html/tab_b.gif
 create mode 100644 docs/html/tab_l.gif
 create mode 100644 docs/html/tab_r.gif
 create mode 100644 docs/html/tabs.css
 create mode 100644 src/pugiconfig.hpp
 create mode 100644 src/pugixpath.cpp
diff --git a/docs/html/annotated.html b/docs/html/annotated.html
new file mode 100644
index 0000000..92baeb6
--- /dev/null
+++ b/docs/html/annotated.html
@@ -0,0 +1,37 @@
+
+pugixml: Class List 
+pugixml Class List Here are the classes, structs, unions and interfaces with brief descriptions:
+Generated on Wed Feb 21 22:19:50 2007 for pugixml by 
+
+  1.4.6-NO  pugixml: Member List 
+pugi::xml_attribute Member List This is the complete list of members for pugi::xml_attribute , including all inherited members.
Generated on Wed Feb 21 22:19:51 2007 for pugixml by 
+
+  1.4.6-NO  pugixml: pugi::xml_attribute Class Reference 
+pugi::xml_attribute Class Reference Collaboration diagram for pugi::xml_attribute:
[legend ] List of all members. Detailed Description 
+A light-weight wrapper for manipulating attributes in DOM tree. 
+
+Note: xml_attribute  does not allocate any memory for the attribute it wraps; it only wraps a pointer to existing attribute. 
+
+
+Public Member Functions   xml_attribute  ()  Default ctor.     operator unspecified_bool_type  () const   Safe bool conversion.   operator!  () const bool  operator==  (const xml_attribute  &r) const   Compare wrapped pointer to the attribute to the pointer that is wrapped by r .   bool  operator!=  (const xml_attribute  &r) const   Compare wrapped pointer to the attribute to the pointer that is wrapped by r .   bool  operator<  (const xml_attribute  &r) const   Compare wrapped pointer to the attribute to the pointer that is wrapped by r .   bool  operator>  (const xml_attribute  &r) const   Compare wrapped pointer to the attribute to the pointer that is wrapped by r .   bool  operator<=  (const xml_attribute  &r) const   Compare wrapped pointer to the attribute to the pointer that is wrapped by r .   bool  operator>=  (const xml_attribute  &r) const   Compare wrapped pointer to the attribute to the pointer that is wrapped by r .   xml_attribute  next_attribute  () const   Get next attribute in attribute list of node that contains the attribute.   xml_attribute  previous_attribute  () const   Get previous attribute in attribute list of node that contains the attribute.   int  as_int  () const   Cast attribute value as int.   double  as_double  () const   Cast attribute value as double.   float  as_float  () const   Cast attribute value as float.   bool  as_bool  () const   Cast attribute value as bool.   document_order  () const xml_attribute  & operator=  (const char *rhs)  Set attribute value to rhs .   xml_attribute  & operator=  (int rhs)  Set attribute value to rhs .   xml_attribute  & operator=  (double rhs)  Set attribute value to rhs .   xml_attribute  & operator=  (bool rhs)  Set attribute value to either 'true' or 'false' (depends on whether rhs  is true or false).   bool  set_name  (const char *rhs)  Set attribute name to rhs .   bool  set_value  (const char *rhs)  Set attribute value to rhs .   bool  empty  () const   Check if attribute is empty.   const char *  name  () const   Get attribute name.   const char *  value  () const   Get attribute value.   Friends xml_attribute_iterator xml_node 
+Constructor & Destructor Documentation 
+
+
+  
+    
+      
+        
+          pugi::xml_attribute::xml_attribute            
+          (  
+                     
+           )  
+           
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Default ctor. 
+
+Constructs an empty attribute.     
 
+   
+
+Member Function Documentation 
+
+
+  
+    
+      
+        
+          pugi::xml_attribute::operator unspecified_bool_type            
+          (  
+                     
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Safe bool conversion. 
+
+Allows xml_node  to be used in a context where boolean variable is expected, such as 'if (node)'.     
 
+   
+
+
+
+  
+    
+      
+        
+          bool pugi::xml_attribute::operator==            
+          (  
+          const xml_attribute  &  
+           r            
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Compare wrapped pointer to the attribute to the pointer that is wrapped by r . 
+
+
Parameters: 
+  
+    r  - value to compare to  
+ Returns: comparison result   
+   
+
+
+
+  
+    
+      
+        
+          bool pugi::xml_attribute::operator!=            
+          (  
+          const xml_attribute  &  
+           r            
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Compare wrapped pointer to the attribute to the pointer that is wrapped by r . 
+
+
Parameters: 
+  
+    r  - value to compare to  
+ Returns: comparison result   
+   
+
+
+
+  
+    
+      
+        
+          bool pugi::xml_attribute::operator<            
+          (  
+          const xml_attribute  &  
+           r            
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Compare wrapped pointer to the attribute to the pointer that is wrapped by r . 
+
+
Parameters: 
+  
+    r  - value to compare to  
+ Returns: comparison result   
+   
+
+
+
+  
+    
+      
+        
+          bool pugi::xml_attribute::operator>            
+          (  
+          const xml_attribute  &  
+           r            
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Compare wrapped pointer to the attribute to the pointer that is wrapped by r . 
+
+
Parameters: 
+  
+    r  - value to compare to  
+ Returns: comparison result   
+   
+
+
+
+  
+    
+      
+        
+          bool pugi::xml_attribute::operator<=            
+          (  
+          const xml_attribute  &  
+           r            
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Compare wrapped pointer to the attribute to the pointer that is wrapped by r . 
+
+
Parameters: 
+  
+    r  - value to compare to  
+ Returns: comparison result   
+   
+
+
+
+  
+    
+      
+        
+          bool pugi::xml_attribute::operator>=            
+          (  
+          const xml_attribute  &  
+           r            
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Compare wrapped pointer to the attribute to the pointer that is wrapped by r . 
+
+
Parameters: 
+  
+    r  - value to compare to  
+ Returns: comparison result   
+   
+
+
+
+  
+    
+      
+        
+          xml_attribute  pugi::xml_attribute::next_attribute           (  
+                     
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Get next attribute in attribute list of node that contains the attribute. 
+
+
Returns: next attribute, if any; empty attribute otherwise   
+   
+
+
+
+  
+    
+      
+        
+          xml_attribute  pugi::xml_attribute::previous_attribute           (  
+                     
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Get previous attribute in attribute list of node that contains the attribute. 
+
+
Returns: previous attribute, if any; empty attribute otherwise   
+   
+
+
+
+  
+    
+      
+        
+          int pugi::xml_attribute::as_int            
+          (  
+                     
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Cast attribute value as int. 
+
+
Returns: attribute value as int, or 0 if conversion did not succeed or attribute is empty   
+   
+
+
+
+  
+    
+      
+        
+          double pugi::xml_attribute::as_double            
+          (  
+                     
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Cast attribute value as double. 
+
+
Returns: attribute value as double, or 0.0 if conversion did not succeed or attribute is empty   
+   
+
+
+
+  
+    
+      
+        
+          float pugi::xml_attribute::as_float            
+          (  
+                     
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Cast attribute value as float. 
+
+
Returns: attribute value as float, or 0.0f if conversion did not succeed or attribute is empty   
+   
+
+
+
+  
+    
+      
+        
+          bool pugi::xml_attribute::as_bool            
+          (  
+                     
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Cast attribute value as bool. 
+
+Returns true for attributes with values that start with '1', 't', 'T', 'y', 'Y', returns false for other attributes.
+
Returns: attribute value as bool, or false if conversion did not succeed or attribute is empty   
+   
+
+
+
+  
+    
+      
+        
+          xml_attribute & pugi::xml_attribute::operator=           (  
+          const char *  
+           rhs            
+           )  
+           
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Set attribute value to rhs . 
+
+
Parameters: 
+  
+    rhs  - new attribute value  
+ Returns: self   
+   
+
+
+
+  
+    
+      
+        
+          xml_attribute & pugi::xml_attribute::operator=           (  
+          int  
+           rhs            
+           )  
+           
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Set attribute value to rhs . 
+
+
Parameters: 
+  
+    rhs  - new attribute value  
+ Returns: self   
+   
+
+
+
+  
+    
+      
+        
+          xml_attribute & pugi::xml_attribute::operator=           (  
+          double  
+           rhs            
+           )  
+           
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Set attribute value to rhs . 
+
+
Parameters: 
+  
+    rhs  - new attribute value  
+ Returns: self   
+   
+
+
+
+  
+    
+      
+        
+          xml_attribute & pugi::xml_attribute::operator=           (  
+          bool  
+           rhs            
+           )  
+           
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Set attribute value to either 'true' or 'false' (depends on whether rhs  is true or false). 
+
+
Parameters: 
+  
+    rhs  - new attribute value  
+ Returns: self   
+   
+
+
+
+  
+    
+      
+        
+          bool pugi::xml_attribute::set_name            
+          (  
+          const char *  
+           rhs            
+           )  
+           
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Set attribute name to rhs . 
+
+
Parameters: 
+  
+    rhs  - new attribute name  
+ Returns: success flag (call fails if attribute is empty or there is not enough memory)   
+   
+
+
+
+  
+    
+      
+        
+          bool pugi::xml_attribute::set_value            
+          (  
+          const char *  
+           rhs            
+           )  
+           
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Set attribute value to rhs . 
+
+
Parameters: 
+  
+    rhs  - new attribute value  
+ Returns: success flag (call fails if attribute is empty or there is not enough memory)   
+   
+
+
+
+  
+    
+      
+        
+          bool pugi::xml_attribute::empty            
+          (  
+                     
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Check if attribute is empty. 
+
+
Returns: true if attribute is empty, false otherwise   
+   
+
+
+
+  
+    
+      
+        
+          const char* pugi::xml_attribute::name            
+          (  
+                     
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Get attribute name. 
+
+
Returns: attribute name, or "" if attribute is empty   
+   
+
+
+
+  
+    
+      
+        
+          const char* pugi::xml_attribute::value            
+          (  
+                     
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Get attribute value. 
+
+
Returns: attribute value, or "" if attribute is empty   
+   
+
+Generated on Wed Feb 21 22:19:51 2007 for pugixml by 
+
+  1.4.6-NO  pugixml: Member List 
+pugi::xml_attribute_iterator Member List This is the complete list of members for pugi::xml_attribute_iterator , including all inherited members.
Generated on Wed Feb 21 22:19:51 2007 for pugixml by 
+
+  1.4.6-NO  pugixml: pugi::xml_attribute_iterator Class Reference 
+pugi::xml_attribute_iterator Class Reference Inheritance diagram for pugi::xml_attribute_iterator:
[legend ] 
+ 
+[legend ] List of all members. Detailed Description 
+Attribute iterator. 
+
+It's a bidirectional iterator with value type 'xml_attribute'. 
+
+
+Constructor & Destructor Documentation 
+
+
+  
+    
+      
+        
+          pugi::xml_attribute_iterator::xml_attribute_iterator            
+          (  
+          const xml_attribute  &  
+           node            
+           )  
+           
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Initializing ctor. 
+
+
Parameters: 
+  
+    node  - node that iterator will point at  
+  
+   
+
+
+
+  
+    
+      
+        
+          pugi::xml_attribute_iterator::xml_attribute_iterator            
+          (  
+          xml_attribute_struct *  
+           ref ,  
+         
+        
+          xml_attribute_struct *  
+           prev  
+         
+        
+          )  
+           
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Initializing ctor (for past-the-end). 
+
+
Parameters: 
+  
+    ref  - should be 0  prev  - previous node  
+  
+   
+
+Member Function Documentation 
+
+
+
+  
+    
+       
+     
+    
+
+
+Check if this iterator is equal to rhs . 
+
+
Parameters: 
+  
+ Returns: comparison result   
+   
+
+
+
+
+  
+    
+       
+     
+    
+
+
+Check if this iterator is not equal to rhs . 
+
+
Parameters: 
+  
+ Returns: comparison result   
+   
+
+
+
+  
+    
+      
+        
+          xml_attribute & pugi::xml_attribute_iterator::operator *           (  
+                     
+           )  
+           
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Dereferencing operator. 
+
+
Returns: reference to the node iterator points at   
+   
+
+
+
+  
+    
+      
+        
+          xml_attribute * pugi::xml_attribute_iterator::operator->           (  
+                     
+           )  
+           
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Member access operator. 
+
+
Returns: poitner to the node iterator points at   
+   
+
+
+
+
+  
+    
+       
+     
+    
+
+
+Pre-increment operator. 
+
+
Returns: self   
+   
+
+
+
+
+  
+    
+       
+     
+    
+
+
+Post-increment operator. 
+
+
Returns: old value   
+   
+
+
+
+
+  
+    
+       
+     
+    
+
+
+Pre-decrement operator. 
+
+
Returns: self   
+   
+
+
+
+
+  
+    
+       
+     
+    
+
+
+Post-decrement operator. 
+
+
Returns: old value   
+   
+
+Generated on Wed Feb 21 22:19:51 2007 for pugixml by 
+
+  1.4.6-NO  pugixml: Member List 
+pugi::xml_document Member List This is the complete list of members for pugi::xml_document , including all inherited members.
+  _root  (defined in pugi::xml_node )pugi::xml_node  [protected]all_elements_by_name (const char *name, OutputIterator it) const pugi::xml_node all_elements_by_name_w (const char *name, OutputIterator it) const pugi::xml_node append_attribute (const char *name)pugi::xml_node append_child (xml_node_type type=node_element)pugi::xml_node attribute (const char *name) const pugi::xml_node attribute_iterator  typedefpugi::xml_node attribute_w (const char *name) const pugi::xml_node attributes_begin () const pugi::xml_node attributes_end () const pugi::xml_node begin () const pugi::xml_node child (const char *name) const pugi::xml_node child_value () const pugi::xml_node child_value (const char *name) const pugi::xml_node child_value_w (const char *name) const pugi::xml_node child_w (const char *name) const pugi::xml_node document_order () const  (defined in pugi::xml_node )pugi::xml_node empty () const pugi::xml_node end () const pugi::xml_node find_attribute (Predicate pred) const pugi::xml_node  [inline]find_child (Predicate pred) const pugi::xml_node  [inline]find_node (Predicate pred) const pugi::xml_node  [inline]first_attribute () const pugi::xml_node first_child () const pugi::xml_node first_element_by_path (const char *path, char delimiter= '/') const pugi::xml_node get_allocator () const  (defined in pugi::xml_node )pugi::xml_node  [protected]insert_attribute_after (const char *name, const xml_attribute &attr)pugi::xml_node insert_attribute_before (const char *name, const xml_attribute &attr)pugi::xml_node insert_child_after (xml_node_type type, const xml_node &node)pugi::xml_node insert_child_before (xml_node_type type, const xml_node &node)pugi::xml_node iterator  typedefpugi::xml_node last_attribute () const pugi::xml_node last_child () const pugi::xml_node load (std::istream &stream, unsigned int options=parse_default)pugi::xml_document load (const char *contents, unsigned int options=parse_default)pugi::xml_document load_file (const char *name, unsigned int options=parse_default)pugi::xml_document name () const pugi::xml_node next_sibling (const char *name) const pugi::xml_node next_sibling () const pugi::xml_node next_sibling_w (const char *name) const pugi::xml_node operator unspecified_bool_type () const pugi::xml_node operator! () const  (defined in pugi::xml_node )pugi::xml_node operator!= (const xml_node &r) const pugi::xml_node operator< (const xml_node &r) const pugi::xml_node operator<= (const xml_node &r) const pugi::xml_node operator== (const xml_node &r) const pugi::xml_node operator> (const xml_node &r) const pugi::xml_node operator>= (const xml_node &r) const pugi::xml_node parent () const pugi::xml_node parse (char *xmlstr, unsigned int options=parse_default)pugi::xml_document parse (const transfer_ownership_tag &, char *xmlstr, unsigned int options=parse_default)pugi::xml_document path (char delimiter= '/') const pugi::xml_node precompute_document_order ()pugi::xml_document precompute_document_order_impl () (defined in pugi::xml_node )pugi::xml_node  [protected]previous_sibling (const char *name) const pugi::xml_node previous_sibling () const pugi::xml_node previous_sibling_w (const char *name) const pugi::xml_node print (std::ostream &os, const char *indent="\t", unsigned int flags=format_default, unsigned int depth=0)pugi::xml_node remove_attribute (const xml_attribute &a)pugi::xml_node remove_attribute (const char *name)pugi::xml_node remove_child (const xml_node &n)pugi::xml_node remove_child (const char *name)pugi::xml_node root () const pugi::xml_node save_file (const char *name, const char *indent="\t", unsigned int flags=format_default)pugi::xml_document select_nodes (const char *query) const pugi::xml_node select_nodes (xpath_query &query) const pugi::xml_node select_single_node (const char *query) const pugi::xml_node select_single_node (xpath_query &query) const pugi::xml_node set_name (const char *rhs)pugi::xml_node set_value (const char *rhs)pugi::xml_node traverse (xml_tree_walker &walker)pugi::xml_node type () const pugi::xml_node unspecified_bool_type  typedef (defined in pugi::xml_node )pugi::xml_node  [protected]value () const pugi::xml_node xml_document ()pugi::xml_document xml_node (xml_node_struct *p) (defined in pugi::xml_node )pugi::xml_node  [explicit, protected]xml_node ()pugi::xml_node ~xml_document ()pugi::xml_document 
Generated on Wed Feb 21 22:19:52 2007 for pugixml by 
+
+  1.4.6-NO  pugixml: pugi::xml_document Class Reference 
+pugi::xml_document Class Reference Inheritance diagram for pugi::xml_document:
+ 
+[legend ] 
+ 
+[legend ] List of all members. Detailed Description 
+Document class (DOM tree root). 
+
+This class has noncopyable semantics (private copy ctor/assignment operator). 
+
+
+Member Function Documentation 
+
+
+  
+    
+      
+        
+          bool pugi::xml_document::load            
+          (  
+          std::istream &  
+           stream ,  
+         
+        
+          unsigned int  
+           options  = parse_default  
+         
+        
+          )  
+           
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Load document from stream. 
+
+
Parameters: 
+  
+    stream  - stream with xml data  options  - parsing options  
+ Returns: success flag   
+   
+
+
+
+  
+    
+      
+        
+          bool pugi::xml_document::load            
+          (  
+          const char *  
+           contents ,  
+         
+        
+          unsigned int  
+           options  = parse_default  
+         
+        
+          )  
+           
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Load document from string. 
+
+
Parameters: 
+  
+    contents  - input string  options  - parsing options  
+ Returns: success flag   
+   
+
+
+
+  
+    
+      
+        
+          bool pugi::xml_document::load_file            
+          (  
+          const char *  
+           name ,  
+         
+        
+          unsigned int  
+           options  = parse_default  
+         
+        
+          )  
+           
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Load document from file. 
+
+
Parameters: 
+  
+    name  - file name  options  - parsing options  
+ Returns: success flag   
+   
+
+
+
+  
+    
+      
+        
+          bool pugi::xml_document::parse            
+          (  
+          char *  
+           xmlstr ,  
+         
+        
+          unsigned int  
+           options  = parse_default  
+         
+        
+          )  
+           
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Parse the given XML string in-situ. 
+
+The string is modified; you should ensure that string data will persist throughout the document's lifetime. Although, document does not gain ownership over the string, so you should free the memory occupied by it manually.
+
Parameters: 
+  
+    xmlstr  - readwrite string with xml data  options  - parsing options  
+ Returns: success flag   
+   
+
+
+
+
+  
+    
+       
+     
+    
+
+
+Parse the given XML string in-situ (gains ownership). 
+
+The string is modified; document gains ownership over the string, so you don't have to worry about it's lifetime. Call example: doc.parse(transfer_ownership_tag(), string, options);
+
Parameters: 
+  
+    xmlstr  - readwrite string with xml data  options  - parsing options  
+ Returns: success flag   
+   
+
+
+
+  
+    
+      
+        
+          bool pugi::xml_document::save_file            
+          (  
+          const char *  
+           name ,  
+         
+        
+          const char *  
+           indent  = "\t",  
+         
+        
+          unsigned int  
+           flags  = format_default  
+         
+        
+          )  
+           
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Save XML to file. 
+
+
Parameters: 
+  
+    name  - file name  indent  - indentation string  flags  - formatting flags  
+ Returns: success flag   
+   
+
+Generated on Wed Feb 21 22:19:52 2007 for pugixml by 
+
+  1.4.6-NO  pugixml: Member List 
+pugi::xml_node Member List This is the complete list of members for pugi::xml_node , including all inherited members.
+  _root  (defined in pugi::xml_node )pugi::xml_node  [protected]all_elements_by_name (const char *name, OutputIterator it) const pugi::xml_node all_elements_by_name_w (const char *name, OutputIterator it) const pugi::xml_node append_attribute (const char *name)pugi::xml_node append_child (xml_node_type type=node_element)pugi::xml_node attribute (const char *name) const pugi::xml_node attribute_iterator  typedefpugi::xml_node attribute_w (const char *name) const pugi::xml_node attributes_begin () const pugi::xml_node attributes_end () const pugi::xml_node begin () const pugi::xml_node child (const char *name) const pugi::xml_node child_value () const pugi::xml_node child_value (const char *name) const pugi::xml_node child_value_w (const char *name) const pugi::xml_node child_w (const char *name) const pugi::xml_node document_order () const  (defined in pugi::xml_node )pugi::xml_node empty () const pugi::xml_node end () const pugi::xml_node find_attribute (Predicate pred) const pugi::xml_node  [inline]find_child (Predicate pred) const pugi::xml_node  [inline]find_node (Predicate pred) const pugi::xml_node  [inline]first_attribute () const pugi::xml_node first_child () const pugi::xml_node first_element_by_path (const char *path, char delimiter= '/') const pugi::xml_node get_allocator () const  (defined in pugi::xml_node )pugi::xml_node  [protected]insert_attribute_after (const char *name, const xml_attribute &attr)pugi::xml_node insert_attribute_before (const char *name, const xml_attribute &attr)pugi::xml_node insert_child_after (xml_node_type type, const xml_node &node)pugi::xml_node insert_child_before (xml_node_type type, const xml_node &node)pugi::xml_node iterator  typedefpugi::xml_node last_attribute () const pugi::xml_node last_child () const pugi::xml_node name () const pugi::xml_node next_sibling (const char *name) const pugi::xml_node next_sibling () const pugi::xml_node next_sibling_w (const char *name) const pugi::xml_node operator unspecified_bool_type () const pugi::xml_node operator! () const  (defined in pugi::xml_node )pugi::xml_node operator!= (const xml_node &r) const pugi::xml_node operator< (const xml_node &r) const pugi::xml_node operator<= (const xml_node &r) const pugi::xml_node operator== (const xml_node &r) const pugi::xml_node operator> (const xml_node &r) const pugi::xml_node operator>= (const xml_node &r) const pugi::xml_node parent () const pugi::xml_node path (char delimiter= '/') const pugi::xml_node precompute_document_order_impl () (defined in pugi::xml_node )pugi::xml_node  [protected]previous_sibling (const char *name) const pugi::xml_node previous_sibling () const pugi::xml_node previous_sibling_w (const char *name) const pugi::xml_node print (std::ostream &os, const char *indent="\t", unsigned int flags=format_default, unsigned int depth=0)pugi::xml_node remove_attribute (const xml_attribute &a)pugi::xml_node remove_attribute (const char *name)pugi::xml_node remove_child (const xml_node &n)pugi::xml_node remove_child (const char *name)pugi::xml_node root () const pugi::xml_node select_nodes (const char *query) const pugi::xml_node select_nodes (xpath_query &query) const pugi::xml_node select_single_node (const char *query) const pugi::xml_node select_single_node (xpath_query &query) const pugi::xml_node set_name (const char *rhs)pugi::xml_node set_value (const char *rhs)pugi::xml_node traverse (xml_tree_walker &walker)pugi::xml_node type () const pugi::xml_node unspecified_bool_type  typedef (defined in pugi::xml_node )pugi::xml_node  [protected]value () const pugi::xml_node xml_node (xml_node_struct *p) (defined in pugi::xml_node )pugi::xml_node  [explicit, protected]xml_node ()pugi::xml_node xml_node_iterator  (defined in pugi::xml_node )pugi::xml_node  [friend]
Generated on Wed Feb 21 22:19:51 2007 for pugixml by 
+
+  1.4.6-NO  pugixml: pugi::xml_node Class Reference 
+pugi::xml_node Class Reference Inheritance diagram for pugi::xml_node:
+ 
+[legend ] 
[legend ] List of all members. Detailed Description 
+A light-weight wrapper for manipulating nodes in DOM tree. 
+
+Note: xml_node  does not allocate any memory for the node it wraps; it only wraps a pointer to existing node. 
+
+
+Public Types typedef xml_node_iterator   iterator   Node iterator type (for child nodes).   typedef xml_attribute_iterator   attribute_iterator   Node iterator type (for child nodes).   Public Member Functions   xml_node  ()  Default ctor.     operator unspecified_bool_type  () const   Safe bool conversion.   operator!  () const bool  operator==  (const xml_node  &r) const   Compare wrapped pointer to the attribute to the pointer that is wrapped by r .   bool  operator!=  (const xml_node  &r) const   Compare wrapped pointer to the attribute to the pointer that is wrapped by r .   bool  operator<  (const xml_node  &r) const   Compare wrapped pointer to the attribute to the pointer that is wrapped by r .   bool  operator>  (const xml_node  &r) const   Compare wrapped pointer to the attribute to the pointer that is wrapped by r .   bool  operator<=  (const xml_node  &r) const   Compare wrapped pointer to the attribute to the pointer that is wrapped by r .   bool  operator>=  (const xml_node  &r) const   Compare wrapped pointer to the attribute to the pointer that is wrapped by r .   iterator  begin  () const   Access the begin iterator for this node's collection of child nodes.   iterator  end  () const   Access the end iterator for this node's collection of child nodes.   attribute_iterator  attributes_begin  () const   Access the begin iterator for this node's collection of attributes.   attribute_iterator  attributes_end  () const   Access the end iterator for this node's collection of attributes.   bool  empty  () const   Check if node is empty.   xml_node_type  type  () const   Get node type.   const char *  name  () const   Get node name (element name for element nodes, PI target for PI).   const char *  value  () const   Get node value (comment/PI/PCDATA/CDATA contents, depending on node type).   xml_node  child  (const char *name) const   Get child with the specified name.   xml_node  child_w  (const char *name) const   Get child with the name that matches specified pattern.   xml_attribute  attribute  (const char *name) const   Get attribute with the specified name.   xml_attribute  attribute_w  (const char *name) const   Get attribute with the name that matches specified pattern.   xml_node  next_sibling  (const char *name) const   Get first of following sibling nodes with the specified name.   xml_node  next_sibling_w  (const char *name) const   Get first of the following sibling nodes with the name that matches specified pattern.   xml_node  next_sibling  () const   Get following sibling.   xml_node  previous_sibling  (const char *name) const   Get first of preceding sibling nodes with the specified name.   xml_node  previous_sibling_w  (const char *name) const   Get first of the preceding sibling nodes with the name that matches specified pattern.   xml_node  previous_sibling  () const   Get preceding sibling.   xml_node  parent  () const   Get parent node.   xml_node  root  () const   Get root of DOM tree this node belongs to.   const char *  child_value  () const   Get child value of current node; that is, value of the first child node of type PCDATA/CDATA.   const char *  child_value  (const char *name) const   Get child value of child with specified name.   const char *  child_value_w  (const char *name) const   Get child value of child with name that matches the specified pattern.   bool  set_name  (const char *rhs)  Set node name to rhs  (for PI/element nodes).   bool  set_value  (const char *rhs)  Set node value to rhs  (for PI/PCDATA/CDATA/comment nodes).   xml_attribute  append_attribute  (const char *name)  Add attribute with specified name (for element nodes).   xml_attribute  insert_attribute_after  (const char *name, const xml_attribute  &attr)  Insert attribute with specified name after attr  (for element nodes).   xml_attribute  insert_attribute_before  (const char *name, const xml_attribute  &attr)  Insert attribute with specified name before attr  (for element nodes).   xml_node  append_child  (xml_node_type  type=node_element)  Add child node with specified type (for element nodes).   xml_node  insert_child_after  (xml_node_type  type, const xml_node  &node)  Insert child node with specified type after node  (for element nodes).   xml_node  insert_child_before  (xml_node_type  type, const xml_node  &node)  Insert child node with specified type before node  (for element nodes).   void  remove_attribute  (const xml_attribute  &a)  Remove specified attribute.   void  remove_attribute  (const char *name)  Remove attribute with the specified name, if any.   void  remove_child  (const xml_node  &n)  Remove specified child.   void  remove_child  (const char *name)  Remove child with the specified name, if any.   xml_attribute  first_attribute  () const   Get first attribute.   xml_attribute  last_attribute  () const   Get last attribute.   template<typename OutputIterator>  void  all_elements_by_name  (const char *name, OutputIterator it) const   Get all elements from subtree with given name.   template<typename OutputIterator>  void  all_elements_by_name_w  (const char *name, OutputIterator it) const   Get all elements from subtree with name that matches given pattern.   xml_node  first_child  () const   Get first child.   xml_node  last_child  () const   Get last child.   template<typename Predicate>  xml_attribute  find_attribute  (Predicate pred) const   Find attribute using predicate.   template<typename Predicate>  xml_node  find_child  (Predicate pred) const   Find child node using predicate.   template<typename Predicate>  xml_node  find_node  (Predicate pred) const   Find node from subtree using predicate.   std::string  path  (char delimiter= '/') const   Get the absolute node path from root as a text string.   xml_node  first_element_by_path  (const char *path, char delimiter= '/') const   Search for a node by path.   bool  traverse  (xml_tree_walker  &walker)  Recursively traverse subtree with xml_tree_walker .   xpath_node  select_single_node  (const char *query) const   Select single node by evaluating XPath query.   xpath_node  select_single_node  (xpath_query  &query) const   Select single node by evaluating XPath query.   xpath_node_set  select_nodes  (const char *query) const   Select node set by evaluating XPath query.   xpath_node_set  select_nodes  (xpath_query  &query) const   Select node set by evaluating XPath query.   document_order  () const void  print  (std::ostream &os, const char *indent="\t", unsigned int flags=format_default , unsigned int depth=0)  Print subtree to stream.   Protected Types unspecified_bool_type Protected Member Functions xml_node  (xml_node_struct *p)precompute_document_order_impl  ()get_allocator  () const Protected Attributes _root Friends xml_node_iterator 
+Member Typedef Documentation 
+
+
+
+  
+    
+       
+     
+    
+
+
+Node iterator type (for child nodes). 
+
+
See also: xml_node_iterator   
+   
+
+
+
+
+Constructor & Destructor Documentation 
+
+
+  
+    
+      
+        
+          pugi::xml_node::xml_node            
+          (  
+                     
+           )  
+           
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Default ctor. 
+
+Constructs an empty node.     
 
+   
+
+Member Function Documentation 
+
+
+  
+    
+      
+        
+          pugi::xml_node::operator unspecified_bool_type            
+          (  
+                     
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Safe bool conversion. 
+
+Allows xml_node  to be used in a context where boolean variable is expected, such as 'if (node)'.     
 
+   
+
+
+
+  
+    
+      
+        
+          bool pugi::xml_node::operator==            
+          (  
+          const xml_node  &  
+           r            
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Compare wrapped pointer to the attribute to the pointer that is wrapped by r . 
+
+
Parameters: 
+  
+    r  - value to compare to  
+ Returns: comparison result   
+   
+
+
+
+  
+    
+      
+        
+          bool pugi::xml_node::operator!=            
+          (  
+          const xml_node  &  
+           r            
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Compare wrapped pointer to the attribute to the pointer that is wrapped by r . 
+
+
Parameters: 
+  
+    r  - value to compare to  
+ Returns: comparison result   
+   
+
+
+
+  
+    
+      
+        
+          bool pugi::xml_node::operator<            
+          (  
+          const xml_node  &  
+           r            
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Compare wrapped pointer to the attribute to the pointer that is wrapped by r . 
+
+
Parameters: 
+  
+    r  - value to compare to  
+ Returns: comparison result   
+   
+
+
+
+  
+    
+      
+        
+          bool pugi::xml_node::operator>            
+          (  
+          const xml_node  &  
+           r            
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Compare wrapped pointer to the attribute to the pointer that is wrapped by r . 
+
+
Parameters: 
+  
+    r  - value to compare to  
+ Returns: comparison result   
+   
+
+
+
+  
+    
+      
+        
+          bool pugi::xml_node::operator<=            
+          (  
+          const xml_node  &  
+           r            
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Compare wrapped pointer to the attribute to the pointer that is wrapped by r . 
+
+
Parameters: 
+  
+    r  - value to compare to  
+ Returns: comparison result   
+   
+
+
+
+  
+    
+      
+        
+          bool pugi::xml_node::operator>=            
+          (  
+          const xml_node  &  
+           r            
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Compare wrapped pointer to the attribute to the pointer that is wrapped by r . 
+
+
Parameters: 
+  
+    r  - value to compare to  
+ Returns: comparison result   
+   
+
+
+
+  
+    
+      
+        
+          iterator  pugi::xml_node::begin           (  
+                     
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Access the begin iterator for this node's collection of child nodes. 
+
+
Returns: iterator that points to the first child node, or past-the-end iterator if node is empty or has no children   
+   
+
+
+
+  
+    
+      
+        
+          iterator  pugi::xml_node::end           (  
+                     
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Access the end iterator for this node's collection of child nodes. 
+
+
Returns: past-the-end iterator for child list   
+   
+
+
+
+
+  
+    
+       
+     
+    
+
+
+Access the begin iterator for this node's collection of attributes. 
+
+
Returns: iterator that points to the first attribute, or past-the-end iterator if node is empty or has no attributes   
+   
+
+
+
+
+  
+    
+       
+     
+    
+
+
+Access the end iterator for this node's collection of attributes. 
+
+
Returns: past-the-end iterator for attribute list   
+   
+
+
+
+  
+    
+      
+        
+          bool pugi::xml_node::empty            
+          (  
+                     
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Check if node is empty. 
+
+
Returns: true if node is empty, false otherwise   
+   
+
+
+
+
+  
+    
+       
+     
+    
+
+
+Get node type. 
+
+
Returns: node type; node_null for empty nodes   
+   
+
+
+
+  
+    
+      
+        
+          const char* pugi::xml_node::name            
+          (  
+                     
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Get node name (element name for element nodes, PI target for PI). 
+
+
Returns: node name, if any; "" otherwise   
+   
+
+
+
+  
+    
+      
+        
+          const char* pugi::xml_node::value            
+          (  
+                     
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Get node value (comment/PI/PCDATA/CDATA contents, depending on node type). 
+
+
Returns: node value, if any; "" otherwise   
+   
+
+
+
+  
+    
+      
+        
+          xml_node  pugi::xml_node::child           (  
+          const char *  
+           name            
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Get child with the specified name. 
+
+
Parameters: 
+  
+ Returns: child with the specified name, if any; empty node otherwise   
+   
+
+
+
+  
+    
+      
+        
+          xml_node  pugi::xml_node::child_w           (  
+          const char *  
+           name            
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Get child with the name that matches specified pattern. 
+
+
Parameters: 
+  
+    name  - child name pattern  
+ Returns: child with the name that matches pattern, if any; empty node otherwise   
+   
+
+
+
+  
+    
+      
+        
+          xml_attribute  pugi::xml_node::attribute           (  
+          const char *  
+           name            
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Get attribute with the specified name. 
+
+
Parameters: 
+  
+    name  - attribute name  
+ Returns: attribute with the specified name, if any; empty attribute otherwise   
+   
+
+
+
+  
+    
+      
+        
+          xml_attribute  pugi::xml_node::attribute_w           (  
+          const char *  
+           name            
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Get attribute with the name that matches specified pattern. 
+
+
Parameters: 
+  
+    name  - attribute name pattern  
+ Returns: attribute with the name that matches pattern, if any; empty attribute otherwise   
+   
+
+
+
+  
+    
+      
+        
+          xml_node  pugi::xml_node::next_sibling           (  
+          const char *  
+           name            
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Get first of following sibling nodes with the specified name. 
+
+
Parameters: 
+  
+ Returns: node with the specified name, if any; empty node otherwise   
+   
+
+
+
+  
+    
+      
+        
+          xml_node  pugi::xml_node::next_sibling_w           (  
+          const char *  
+           name            
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Get first of the following sibling nodes with the name that matches specified pattern. 
+
+
Parameters: 
+  
+    name  - sibling name pattern  
+ Returns: node with the name that matches pattern, if any; empty node otherwise   
+   
+
+
+
+  
+    
+      
+        
+          xml_node  pugi::xml_node::next_sibling           (  
+                     
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Get following sibling. 
+
+
Returns: following sibling node, if any; empty node otherwise   
+   
+
+
+
+  
+    
+      
+        
+          xml_node  pugi::xml_node::previous_sibling           (  
+          const char *  
+           name            
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Get first of preceding sibling nodes with the specified name. 
+
+
Parameters: 
+  
+ Returns: node with the specified name, if any; empty node otherwise   
+   
+
+
+
+  
+    
+      
+        
+          xml_node  pugi::xml_node::previous_sibling_w           (  
+          const char *  
+           name            
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Get first of the preceding sibling nodes with the name that matches specified pattern. 
+
+
Parameters: 
+  
+    name  - sibling name pattern  
+ Returns: node with the name that matches pattern, if any; empty node otherwise   
+   
+
+
+
+  
+    
+      
+        
+          xml_node  pugi::xml_node::previous_sibling           (  
+                     
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Get preceding sibling. 
+
+
Returns: preceding sibling node, if any; empty node otherwise   
+   
+
+
+
+  
+    
+      
+        
+          xml_node  pugi::xml_node::parent           (  
+                     
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Get parent node. 
+
+
Returns: parent node if any; empty node otherwise   
+   
+
+
+
+  
+    
+      
+        
+          xml_node  pugi::xml_node::root           (  
+                     
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Get root of DOM tree this node belongs to. 
+
+
Returns: tree root   
+   
+
+
+
+  
+    
+      
+        
+          const char* pugi::xml_node::child_value            
+          (  
+                     
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Get child value of current node; that is, value of the first child node of type PCDATA/CDATA. 
+
+
Returns: child value of current node, if any; "" otherwise   
+   
+
+
+
+  
+    
+      
+        
+          const char* pugi::xml_node::child_value            
+          (  
+          const char *  
+           name            
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Get child value of child with specified name. 
+
+
See also: child_value  node.child_value(name) is equivalent to node.child(name).child_value() Parameters: 
+  
+ Returns: child value of specified child node, if any; "" otherwise   
+   
+
+
+
+  
+    
+      
+        
+          const char* pugi::xml_node::child_value_w            
+          (  
+          const char *  
+           name            
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Get child value of child with name that matches the specified pattern. 
+
+
See also: child_value  node.child_value_w(name) is equivalent to node.child_w(name).child_value() Parameters: 
+  
+    name  - child name pattern  
+ Returns: child value of specified child node, if any; "" otherwise   
+   
+
+
+
+  
+    
+      
+        
+          bool pugi::xml_node::set_name            
+          (  
+          const char *  
+           rhs            
+           )  
+           
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Set node name to rhs  (for PI/element nodes). 
+
+
See also: name Parameters: 
+  
+ Returns: success flag (call fails if node is of the wrong type or there is not enough memory)   
+   
+
+
+
+  
+    
+      
+        
+          bool pugi::xml_node::set_value            
+          (  
+          const char *  
+           rhs            
+           )  
+           
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Set node value to rhs  (for PI/PCDATA/CDATA/comment nodes). 
+
+
See also: value Parameters: 
+  
+ Returns: success flag (call fails if node is of the wrong type or there is not enough memory)   
+   
+
+
+
+  
+    
+      
+        
+          xml_attribute  pugi::xml_node::append_attribute           (  
+          const char *  
+           name            
+           )  
+           
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Add attribute with specified name (for element nodes). 
+
+
Parameters: 
+  
+    name  - attribute name  
+ Returns: added attribute, or empty attribute if there was an error (wrong node type)   
+   
+
+
+
+  
+    
+      
+        
+          xml_attribute  pugi::xml_node::insert_attribute_after           (  
+          const char *  
+           name ,  
+         
+        
+          const xml_attribute  &  
+           attr  
+         
+        
+          )  
+           
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Insert attribute with specified name after attr  (for element nodes). 
+
+
Parameters: 
+  
+    name  - attribute name  attr  - attribute to insert a new one after  
+ Returns: inserted attribute, or empty attribute if there was an error (wrong node type, or attr does not belong to node)   
+   
+
+
+
+  
+    
+      
+        
+          xml_attribute  pugi::xml_node::insert_attribute_before           (  
+          const char *  
+           name ,  
+         
+        
+          const xml_attribute  &  
+           attr  
+         
+        
+          )  
+           
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Insert attribute with specified name before attr  (for element nodes). 
+
+
Parameters: 
+  
+    name  - attribute name  attr  - attribute to insert a new one before  
+ Returns: inserted attribute, or empty attribute if there was an error (wrong node type, or attr does not belong to node)   
+   
+
+
+
+
+  
+    
+       
+     
+    
+
+
+Add child node with specified type (for element nodes). 
+
+
Parameters: 
+  
+ Returns: added node, or empty node if there was an error (wrong node type)   
+   
+
+
+
+
+  
+    
+       
+     
+    
+
+
+Insert child node with specified type after node  (for element nodes). 
+
+
Parameters: 
+  
+    type  - node type  node  - node to insert a new one after  
+ Returns: inserted node, or empty node if there was an error (wrong node type, or node  is not a child of this node)   
+   
+
+
+
+
+  
+    
+       
+     
+    
+
+
+Insert child node with specified type before node  (for element nodes). 
+
+
Parameters: 
+  
+    type  - node type  node  - node to insert a new one before  
+ Returns: inserted node, or empty node if there was an error (wrong node type, or node  is not a child of this node)   
+   
+
+
+
+  
+    
+      
+        
+          void pugi::xml_node::remove_attribute            
+          (  
+          const xml_attribute  &  
+           a            
+           )  
+           
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Remove specified attribute. 
+
+
Parameters: 
+  
+    a  - attribute to be removed  
+  
+   
+
+
+
+  
+    
+      
+        
+          void pugi::xml_node::remove_attribute            
+          (  
+          const char *  
+           name            
+           )  
+           
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Remove attribute with the specified name, if any. 
+
+
Parameters: 
+  
+    name  - attribute name  
+  
+   
+
+
+
+  
+    
+      
+        
+          void pugi::xml_node::remove_child            
+          (  
+          const xml_node  &  
+           n            
+           )  
+           
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Remove specified child. 
+
+
Parameters: 
+  
+    n  - child node to be removed  
+  
+   
+
+
+
+  
+    
+      
+        
+          void pugi::xml_node::remove_child            
+          (  
+          const char *  
+           name            
+           )  
+           
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Remove child with the specified name, if any. 
+
+
Parameters: 
+  
+  
+   
+
+
+
+  
+    
+      
+        
+          xml_attribute  pugi::xml_node::first_attribute           (  
+                     
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Get first attribute. 
+
+
Returns: first attribute, if any; empty attribute otherwise   
+   
+
+
+
+  
+    
+      
+        
+          xml_attribute  pugi::xml_node::last_attribute           (  
+                     
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Get last attribute. 
+
+
Returns: last attribute, if any; empty attribute otherwise   
+   
+
+
+
+  
+    
+      
+        
+          
+template<typename OutputIterator>  
+         
+        
+          void pugi::xml_node::all_elements_by_name            
+          (  
+          const char *  
+           name ,  
+         
+        
+          OutputIterator  
+           it  
+         
+        
+          )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Get all elements from subtree with given name. 
+
+
Parameters: 
+  
+    name  - node name  it  - output iterator (for example, std::back_insert_iterator (result of std::back_inserter))  
+  
+   
+
+
+
+  
+    
+      
+        
+          
+template<typename OutputIterator>  
+         
+        
+          void pugi::xml_node::all_elements_by_name_w            
+          (  
+          const char *  
+           name ,  
+         
+        
+          OutputIterator  
+           it  
+         
+        
+          )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Get all elements from subtree with name that matches given pattern. 
+
+
Parameters: 
+  
+    name  - node name pattern  it  - output iterator (for example, std::back_insert_iterator (result of std::back_inserter))  
+  
+   
+
+
+
+  
+    
+      
+        
+          xml_node  pugi::xml_node::first_child           (  
+                     
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Get first child. 
+
+
Returns: first child, if any; empty node otherwise   
+   
+
+
+
+  
+    
+      
+        
+          xml_node  pugi::xml_node::last_child           (  
+                     
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Get last child. 
+
+
Returns: last child, if any; empty node otherwise   
+   
+
+
+
+  
+    
+      
+        
+          
+template<typename Predicate>  
+         
+        
+          xml_attribute  pugi::xml_node::find_attribute           (  
+          Predicate  
+           pred            
+           )  
+           const [inline] 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Find attribute using predicate. 
+
+
Parameters: 
+  
+ Returns: first attribute for which predicate returned true, or empty attribute   
+   
+
+
+
+  
+    
+      
+        
+          
+template<typename Predicate>  
+         
+        
+          xml_node  pugi::xml_node::find_child           (  
+          Predicate  
+           pred            
+           )  
+           const [inline] 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Find child node using predicate. 
+
+
Parameters: 
+  
+    pred  - predicate, that takes xml_node  and returns bool  
+ Returns: first child node for which predicate returned true, or empty node   
+   
+
+
+
+  
+    
+      
+        
+          
+template<typename Predicate>  
+         
+        
+          xml_node  pugi::xml_node::find_node           (  
+          Predicate  
+           pred            
+           )  
+           const [inline] 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Find node from subtree using predicate. 
+
+
Parameters: 
+  
+    pred  - predicate, that takes xml_node  and returns bool  
+ Returns: first node from subtree for which predicate returned true, or empty node   
+   
+
+
+
+  
+    
+      
+        
+          std::string pugi::xml_node::path            
+          (  
+          char  
+           delimiter  = '/'           
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Get the absolute node path from root as a text string. 
+
+
Parameters: 
+  
+    delimiter  - delimiter character to insert between element names  
+ Returns: path string (e.g. '/bookstore/book/author').   
+   
+
+
+
+  
+    
+      
+        
+          xml_node  pugi::xml_node::first_element_by_path           (  
+          const char *  
+           path ,  
+         
+        
+          char  
+           delimiter  = '/' 
+         
+        
+          )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Search for a node by path. 
+
+
Parameters: 
+  
+    path  - path string; e.g. './foo/bar' (relative to node), '/foo/bar' (relative to root), '../foo/bar'.  delimiter  - delimiter character to use while tokenizing path  
+ Returns: matching node, if any; empty node otherwise   
+   
+
+
+
+  
+    
+      
+        
+          bool pugi::xml_node::traverse            
+          (  
+          xml_tree_walker  &  walker            
+           )  
+           
+      
+     
+   
+
+
+
+
+  
+    
+      
+        
+          xpath_node  pugi::xml_node::select_single_node           (  
+          const char *  
+           query            
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Select single node by evaluating XPath query. 
+
+
Parameters: 
+  
+ Returns: first node from the resulting node set by document order, or empty node if none found   
+   
+
+
+
+
+  
+    
+       
+     
+    
+
+
+Select single node by evaluating XPath query. 
+
+
Parameters: 
+  
+    query  - compiled query  
+ Returns: first node from the resulting node set by document order, or empty node if none found   
+   
+
+
+
+  
+    
+      
+        
+          xpath_node_set  pugi::xml_node::select_nodes           (  
+          const char *  
+           query            
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Select node set by evaluating XPath query. 
+
+
Parameters: 
+  
+ Returns: resulting node set   
+   
+
+
+
+
+  
+    
+       
+     
+    
+
+
+Select node set by evaluating XPath query. 
+
+
Parameters: 
+  
+    query  - compiled query  
+ Returns: resulting node set   
+   
+
+
+
+  
+    
+      
+        
+          void pugi::xml_node::print            
+          (  
+          std::ostream &  
+           os ,  
+         
+        
+          const char *  
+           indent  = "\t",  
+         
+        
+          unsigned int  
+           flags  = format_default  
+         
+        
+          unsigned int  
+           depth  = 0 
+         
+        
+          )  
+           
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Print subtree to stream. 
+
+
Parameters: 
+  
+    os  - output stream  indent  - indentation string  flags  - formatting flags  depth  - starting depth (used for indentation)  
+  
+   
+
+Generated on Wed Feb 21 22:19:51 2007 for pugixml by 
+
+  1.4.6-NO  pugixml: Member List 
+pugi::xml_node_iterator Member List This is the complete list of members for pugi::xml_node_iterator , including all inherited members.
Generated on Wed Feb 21 22:19:51 2007 for pugixml by 
+
+  1.4.6-NO  pugixml: pugi::xml_node_iterator Class Reference 
+pugi::xml_node_iterator Class Reference Inheritance diagram for pugi::xml_node_iterator:
[legend ] 
+ 
+[legend ] List of all members. Detailed Description 
+Child node iterator. 
+
+It's a bidirectional iterator with value type 'xml_node'. 
+
+
+Constructor & Destructor Documentation 
+
+
+  
+    
+      
+        
+          pugi::xml_node_iterator::xml_node_iterator            
+          (  
+          const xml_node  &  
+           node            
+           )  
+           
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Initializing ctor. 
+
+
Parameters: 
+  
+    node  - node that iterator will point at  
+  
+   
+
+
+
+  
+    
+      
+        
+          pugi::xml_node_iterator::xml_node_iterator            
+          (  
+          xml_node_struct *  
+           ref ,  
+         
+        
+          xml_node_struct *  
+           prev  
+         
+        
+          )  
+           
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Initializing ctor (for past-the-end). 
+
+
Parameters: 
+  
+    ref  - should be 0  prev  - previous node  
+  
+   
+
+Member Function Documentation 
+
+
+  
+    
+      
+        
+          bool pugi::xml_node_iterator::operator==            
+          (  
+          const xml_node_iterator  &  
+           rhs            
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Check if this iterator is equal to rhs . 
+
+
Parameters: 
+  
+ Returns: comparison result   
+   
+
+
+
+  
+    
+      
+        
+          bool pugi::xml_node_iterator::operator!=            
+          (  
+          const xml_node_iterator  &  
+           rhs            
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Check if this iterator is not equal to rhs . 
+
+
Parameters: 
+  
+ Returns: comparison result   
+   
+
+
+
+  
+    
+      
+        
+          xml_node & pugi::xml_node_iterator::operator *           (  
+                     
+           )  
+           
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Dereferencing operator. 
+
+
Returns: reference to the node iterator points at   
+   
+
+
+
+  
+    
+      
+        
+          xml_node * pugi::xml_node_iterator::operator->           (  
+                     
+           )  
+           
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Member access operator. 
+
+
Returns: poitner to the node iterator points at   
+   
+
+
+
+
+  
+    
+       
+     
+    
+
+
+Pre-increment operator. 
+
+
Returns: self   
+   
+
+
+
+
+  
+    
+       
+     
+    
+
+
+Post-increment operator. 
+
+
Returns: old value   
+   
+
+
+
+
+  
+    
+       
+     
+    
+
+
+Pre-decrement operator. 
+
+
Returns: self   
+   
+
+
+
+
+  
+    
+       
+     
+    
+
+
+Post-decrement operator. 
+
+
Returns: old value   
+   
+
+Generated on Wed Feb 21 22:19:51 2007 for pugixml by 
+
+  1.4.6-NO  pugixml: Member List 
+pugi::xml_tree_walker Member List This is the complete list of members for pugi::xml_tree_walker , including all inherited members.
Generated on Wed Feb 21 22:19:51 2007 for pugixml by 
+
+  1.4.6-NO  pugixml: pugi::xml_tree_walker Class Reference 
+pugi::xml_tree_walker Class Reference Collaboration diagram for pugi::xml_tree_walker:
[legend ] List of all members. Detailed Description 
+Abstract tree walker class. 
+
+
See also: xml_node::traverse  
+
+Public Member Functions xml_tree_walker  ()  Default ctor.  ~xml_tree_walker  ()  Virtual dtor.  virtual bool  begin  (xml_node  &)  Callback that is called when traversal of node begins.   virtual bool  for_each  (xml_node  &)=0  Callback that is called for each node traversed.   virtual bool  end  (xml_node  &)  Callback that is called when traversal of node ends.   Protected Member Functions int  depth  () const   Get node depth.   Friends xml_node 
+Member Function Documentation 
+
+
+  
+    
+      
+        
+          int pugi::xml_tree_walker::depth            
+          (  
+                     
+           )  
+           const [protected] 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Get node depth. 
+
+
Returns: node depth   
+   
+
+
+
+  
+    
+      
+        
+          virtual bool pugi::xml_tree_walker::begin            
+          (  
+          xml_node  &            
+           )  
+           [virtual] 
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Callback that is called when traversal of node begins. 
+
+
Returns: returning false will abort the traversal   
+   
+
+
+
+  
+    
+      
+        
+          virtual bool pugi::xml_tree_walker::for_each            
+          (  
+          xml_node  &            
+           )  
+           [pure virtual] 
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Callback that is called for each node traversed. 
+
+
Returns: returning false will abort the traversal   
+   
+
+
+
+  
+    
+      
+        
+          virtual bool pugi::xml_tree_walker::end            
+          (  
+          xml_node  &            
+           )  
+           [virtual] 
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Callback that is called when traversal of node ends. 
+
+
Returns: returning false will abort the traversal   
+   
+
+Generated on Wed Feb 21 22:19:51 2007 for pugixml by 
+
+  1.4.6-NO  pugixml: Member List 
+pugi::xpath_exception Member List This is the complete list of members for pugi::xpath_exception , including all inherited members.
Generated on Wed Feb 21 22:19:52 2007 for pugixml by 
+
+  1.4.6-NO  pugixml: pugi::xpath_exception Class Reference 
+pugi::xpath_exception Class Reference Inheritance diagram for pugi::xpath_exception:
[legend ] 
[legend ] List of all members. Detailed Description 
+XPath exception class. 
+
+
+Public Member Functions   xpath_exception  (const char *message)  Construct exception from static error string.   virtual const char *  what  () const   throw ()  Return error message.   
+Constructor & Destructor Documentation 
+
+
+  
+    
+      
+        
+          pugi::xpath_exception::xpath_exception            
+          (  
+          const char *  
+           message            
+           )  
+           [explicit] 
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Construct exception from static error string. 
+
+
Parameters: 
+  
+    message  - error string  
+  
+   
+
+Member Function Documentation 
+
+
+  
+    
+      
+        
+          virtual const char* pugi::xpath_exception::what            
+          (  
+                     
+           )  
+           const  throw () [virtual] 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Return error message. 
+
+
Returns: error message   
+   
+
+Generated on Wed Feb 21 22:19:52 2007 for pugixml by 
+
+  1.4.6-NO  pugixml: Member List 
+pugi::xpath_node Member List This is the complete list of members for pugi::xpath_node , including all inherited members.
Generated on Wed Feb 21 22:19:52 2007 for pugixml by 
+
+  1.4.6-NO  pugixml: pugi::xpath_node Class Reference 
+pugi::xpath_node Class Reference Collaboration diagram for pugi::xpath_node:
+ 
+[legend ] List of all members. Detailed Description 
+XPath node class. 
+
+XPath defines node to be either xml_node  or xml_attribute  in pugixml terminology, so xpath_node  is either xml_node  or xml_attribute . 
+
+
+Constructor & Destructor Documentation 
+
+
+  
+    
+      
+        
+          pugi::xpath_node::xpath_node            
+          (  
+          const xml_node  &  
+           node            
+           )  
+           
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Construct XPath node from XML node. 
+
+
Parameters: 
+  
+  
+   
+
+
+
+  
+    
+      
+        
+          pugi::xpath_node::xpath_node            
+          (  
+          const xml_attribute  &  
+           attribute ,  
+         
+        
+          const xml_node  &  
+           parent  
+         
+        
+          )  
+           
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Construct XPath node from XML attribute. 
+
+
Parameters: 
+  
+    attribute  - XML attribute  parent  - attribute's parent node  
+  
+   
+
+Member Function Documentation 
+
+
+  
+    
+      
+        
+          xml_node  pugi::xpath_node::node           (  
+                     
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Get XML node, if any. 
+
+
Returns: contained XML node, empty node otherwise   
+   
+
+
+
+  
+    
+      
+        
+          xml_attribute  pugi::xpath_node::attribute           (  
+                     
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Get XML attribute, if any. 
+
+
Returns: contained XML attribute, if any, empty attribute otherwise   
+   
+
+
+
+  
+    
+      
+        
+          xml_node  pugi::xpath_node::parent           (  
+                     
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Get parent of contained XML attribute, if any. 
+
+
Returns: parent of contained XML attribute, if any, empty node otherwise   
+   
+
+
+
+  
+    
+      
+        
+          pugi::xpath_node::operator unspecified_bool_type            
+          (  
+                     
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Safe bool conversion. 
+
+Allows xpath_node  to be used in a context where boolean variable is expected, such as 'if (node)'.     
 
+   
+
+
+
+  
+    
+      
+        
+          bool pugi::xpath_node::operator==            
+          (  
+          const xpath_node  &  
+           n            
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Compares two XPath nodes. 
+
+
Parameters: 
+  
+    n  - XPath node to compare to  
+ Returns: comparison result   
+   
+
+
+
+  
+    
+      
+        
+          bool pugi::xpath_node::operator!=            
+          (  
+          const xpath_node  &  
+           n            
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Compares two XPath nodes. 
+
+
Parameters: 
+  
+    n  - XPath node to compare to  
+ Returns: comparison result   
+   
+
+Generated on Wed Feb 21 22:19:52 2007 for pugixml by 
+
+  1.4.6-NO  pugixml: Member List 
+pugi::xpath_node_set Member List This is the complete list of members for pugi::xpath_node_set , including all inherited members.
Generated on Wed Feb 21 22:19:52 2007 for pugixml by 
+
+  1.4.6-NO  pugixml: pugi::xpath_node_set Class Reference 
+pugi::xpath_node_set Class Reference Collaboration diagram for pugi::xpath_node_set:
+ 
+[legend ] List of all members. Detailed Description 
+Not necessarily ordered constant collection of XPath nodes. 
+
+
+Member Enumeration Documentation 
+
+
+
+  
+    
+       
+     
+    
+
+
+Collection type. 
+
+
Enumerator:  
+
+
+Not ordered.  
+Sorted by document order (ascending).  
+Sorted by document order (descending).  
+  
+   
+
+Constructor & Destructor Documentation 
+
+
+  
+    
+      
+        
+          pugi::xpath_node_set::xpath_node_set            
+          (  
+          const xpath_node_set  &  
+           ns            
+           )  
+           
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Copy ctor. 
+
+
Parameters: 
+  
+  
+   
+
+Member Function Documentation 
+
+
+
+  
+    
+       
+     
+    
+
+
+Assignment operator. 
+
+
Parameters: 
+  
+ Returns: self   
+   
+
+
+
+  
+    
+      
+        
+          type_t  pugi::xpath_node_set::type           (  
+                     
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Get collection type. 
+
+
Returns: collection type   
+   
+
+
+
+  
+    
+      
+        
+          size_t pugi::xpath_node_set::size            
+          (  
+                     
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Get collection size. 
+
+
Returns: collection size   
+   
+
+
+
+
+  
+    
+       
+     
+    
+
+
+Get begin constant iterator for collection. 
+
+
Returns: begin constant iterator   
+   
+
+
+
+
+  
+    
+       
+     
+    
+
+
+Get end iterator for collection. 
+
+
Returns: end iterator   
+   
+
+
+
+  
+    
+      
+        
+          void pugi::xpath_node_set::sort            
+          (  
+          bool  
+           reverse  = false           
+           )  
+           
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Sort the collection in ascending/descending order by document order. 
+
+
Parameters: 
+  
+    reverse  - whether to sort in ascending (false) or descending (true) order  
+  
+   
+
+
+
+  
+    
+      
+        
+          xpath_node  pugi::xpath_node_set::first           (  
+                     
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Get first node in the collection by document order. 
+
+
Returns: first node by document order   
+   
+
+
+
+  
+    
+      
+        
+          bool pugi::xpath_node_set::empty            
+          (  
+                     
+           )  
+           const 
+         
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Return true if collection is empty. 
+
+
Returns: true if collection is empty, false otherwise   
+   
+
+Generated on Wed Feb 21 22:19:52 2007 for pugixml by 
+
+  1.4.6-NO  pugixml: Member List 
+pugi::xpath_query Member List This is the complete list of members for pugi::xpath_query , including all inherited members.
Generated on Wed Feb 21 22:19:50 2007 for pugixml by 
+
+  1.4.6-NO  pugixml: pugi::xpath_query Class Reference 
+pugi::xpath_query Class Reference Collaboration diagram for pugi::xpath_query:
[legend ] List of all members. Detailed Description 
+A class that holds compiled XPath query and allows to evaluate query result. 
+
+
+Constructor & Destructor Documentation 
+
+
+  
+    
+      
+        
+          pugi::xpath_query::xpath_query            
+          (  
+          const char *  
+           query            
+           )  
+           [explicit] 
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Ctor from string with XPath expression. 
+
+Throws xpath_exception  on compilation error, std::bad_alloc on out of memory error.
+
Parameters: 
+  
+    query  - string with XPath expression  
+  
+   
+
+Member Function Documentation 
+
+
+  
+    
+      
+        
+          bool pugi::xpath_query::evaluate_boolean            
+          (  
+          const xml_node  &  
+           n            
+           )  
+           
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Evaluate expression as boolean value for the context node n . 
+
+If expression does not directly evaluate to boolean, the expression result is converted as through boolean() XPath function call. Throws std::bad_alloc on out of memory error.
+
Parameters: 
+  
+ Returns: evaluation result   
+   
+
+
+
+  
+    
+      
+        
+          double pugi::xpath_query::evaluate_number            
+          (  
+          const xml_node  &  
+           n            
+           )  
+           
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Evaluate expression as double value for the context node n . 
+
+If expression does not directly evaluate to double, the expression result is converted as through number() XPath function call. Throws std::bad_alloc on out of memory error.
+
Parameters: 
+  
+ Returns: evaluation result   
+   
+
+
+
+  
+    
+      
+        
+          std::string pugi::xpath_query::evaluate_string            
+          (  
+          const xml_node  &  
+           n            
+           )  
+           
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Evaluate expression as string value for the context node n . 
+
+If expression does not directly evaluate to string, the expression result is converted as through string() XPath function call. Throws std::bad_alloc on out of memory error.
+
Parameters: 
+  
+ Returns: evaluation result   
+   
+
+
+
+
+  
+    
+       
+     
+    
+
+
+Evaluate expression as node set for the context node n . 
+
+If expression does not directly evaluate to node set, function returns empty node set. Throws std::bad_alloc on out of memory error.
+
Parameters: 
+  
+ Returns: evaluation result   
+   
+
+Generated on Wed Feb 21 22:19:50 2007 for pugixml by 
+
+  1.4.6-NO  pugixml: Class Members 
+
+Here is a list of all documented class members with links to the class documentation for each member:
+
+
+
+
+
+
+
+
+
+
+
+operator *()
+: pugi::xml_attribute_iterator , pugi::xml_node_iterator  operator unspecified_bool_type()
+: pugi::xpath_node , pugi::xml_node , pugi::xml_attribute  operator!=()
+: pugi::xpath_node , pugi::xml_attribute_iterator , pugi::xml_node_iterator , pugi::xml_node , pugi::xml_attribute  operator++()
+: pugi::xml_attribute_iterator , pugi::xml_node_iterator  operator--()
+: pugi::xml_attribute_iterator , pugi::xml_node_iterator  operator->()
+: pugi::xml_attribute_iterator , pugi::xml_node_iterator  operator<()
+: pugi::xml_node , pugi::xml_attribute  operator<=()
+: pugi::xml_node , pugi::xml_attribute  operator=()
+: pugi::xpath_node_set , pugi::xml_attribute  operator==()
+: pugi::xpath_node , pugi::xml_attribute_iterator , pugi::xml_node_iterator , pugi::xml_node , pugi::xml_attribute  operator>()
+: pugi::xml_node , pugi::xml_attribute  operator>=()
+: pugi::xml_node , pugi::xml_attribute   
+
+
+
+
+
+
+
+
+Generated on Wed Feb 21 22:19:50 2007 for pugixml by 
+
+  1.4.6-NO  pugixml: Class Members - Enumerations 
+
+
+Generated on Wed Feb 21 22:19:50 2007 for pugixml by 
+
+  1.4.6-NO  pugixml: Class Members - Enumerator 
+
+
+Generated on Wed Feb 21 22:19:50 2007 for pugixml by 
+
+  1.4.6-NO  pugixml: Class Members - Functions 
+
+ 
+
+
+
+
+
+
+
+
+
+
+
+operator *()
+: pugi::xml_attribute_iterator , pugi::xml_node_iterator  operator unspecified_bool_type()
+: pugi::xpath_node , pugi::xml_node , pugi::xml_attribute  operator!=()
+: pugi::xpath_node , pugi::xml_attribute_iterator , pugi::xml_node_iterator , pugi::xml_node , pugi::xml_attribute  operator++()
+: pugi::xml_attribute_iterator , pugi::xml_node_iterator  operator--()
+: pugi::xml_attribute_iterator , pugi::xml_node_iterator  operator->()
+: pugi::xml_attribute_iterator , pugi::xml_node_iterator  operator<()
+: pugi::xml_node , pugi::xml_attribute  operator<=()
+: pugi::xml_node , pugi::xml_attribute  operator=()
+: pugi::xpath_node_set , pugi::xml_attribute  operator==()
+: pugi::xpath_node , pugi::xml_attribute_iterator , pugi::xml_node_iterator , pugi::xml_node , pugi::xml_attribute  operator>()
+: pugi::xml_node , pugi::xml_attribute  operator>=()
+: pugi::xml_node , pugi::xml_attribute   
+
+
+
+
+
+
+
+
+Generated on Wed Feb 21 22:19:50 2007 for pugixml by 
+
+  1.4.6-NO  pugixml: Class Members - Typedefs 
+
+
+Generated on Wed Feb 21 22:19:50 2007 for pugixml by 
+
+  1.4.6-NO  pugixml: Graph Legend 
+Graph Legend This page explains how to interpret the graphs that are generated by doxygen.
+Consider the following example: 
+class  Invisible { };
+
+
+class  Truncated : public  Invisible { };
+
+
+class  Undocumented { };
+
+
+class  PublicBase : public  Truncated { };
+
+
+template <class  T> class  Templ { };
+
+
+class  ProtectedBase { };
+
+
+class  PrivateBase { };
+
+
+class  Used { };
+
+
+class  Inherited : public  PublicBase,
+                  protected  ProtectedBase,
+                  private  PrivateBase,
+                  public  Undocumented
+                  public  Templ<int>
+{
+  private :
+    Used *m_usedClass;
+};
+ MAX_DOT_GRAPH_HEIGHT tag in the configuration file is set to 240 this will result in the following graph:
+
+
+
+The boxes in the above graph have the following meaning: 
+
+A filled black box represents the struct or class for which the graph is generated.  
+
+A box with a black border denotes a documented struct or class.  
+
+A box with a grey border denotes an undocumented struct or class.  
+
+A box with a red border denotes a documented struct or class forwhich not all inheritance/containment relations are shown. A graph is truncated if it does not fit within the specified boundaries.  
+ 
+The arrows have the following meaning: 
+
+A dark blue arrow is used to visualize a public inheritance relation between two classes.  
+
+A dark green arrow is used for protected inheritance.  
+
+A dark red arrow is used for private inheritance.  
+
+A purple dashed arrow is used if a class is contained or used by another class. The arrow is labeled with the variable(s) through which the pointed class or struct is accessible.  
+
+A yellow dashed arrow denotes a relation between a template instance and the template class it was instantiated from. The arrow is labeled with the template parameters of the instance.  
+ 
+Generated on Wed Feb 21 22:19:53 2007 for pugixml by 
+
+  1.4.6-NO  pugixml: Hierarchical Index 
+pugixml Class Hierarchy Go to the graphical class hierarchy 
+
+This inheritance list is sorted roughly, but not completely, alphabetically:
+Generated on Wed Feb 21 22:19:50 2007 for pugixml by 
+
+  1.4.6-NO  pugixml: Main Page 
+pugixml Documentation 
+
+
0.3  Generated on Wed Feb 21 22:19:50 2007 for pugixml by 
+
+  1.4.6-NO  pugixml: Graphical Class Hierarchy 
+pugixml Graphical Class Hierarchy Go to the textual class hierarchy 
+
+
+
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+ 
+Generated on Wed Feb 21 22:19:53 2007 for pugixml by 
+
+  1.4.6-NO  pugixml: Class Members 
+
+
+as_utf16()
+: pugi  as_utf8()
+: pugi  format_default
+: pugi  format_indent
+: pugi  format_raw
+: pugi  format_utf8
+: pugi  format_write_bom
+: pugi  memory_block_size
+: pugi  node_cdata
+: pugi  node_comment
+: pugi  node_document
+: pugi  node_element
+: pugi  node_null
+: pugi  node_pcdata
+: pugi  node_pi
+: pugi  parse_cdata
+: pugi  parse_comments
+: pugi  parse_default
+: pugi  parse_eol
+: pugi  parse_escapes
+: pugi  parse_minimal
+: pugi  parse_pi
+: pugi  parse_wconv_attribute
+: pugi  parse_wnorm_attribute
+: pugi  parse_ws_pcdata
+: pugi  xml_node_type
+: pugi   
+Generated on Wed Feb 21 22:19:52 2007 for pugixml by 
+
+  1.4.6-NO  pugixml: Class Members 
+
+
+Generated on Wed Feb 21 22:19:52 2007 for pugixml by 
+
+  1.4.6-NO  pugixml: Class Members 
+
+
+Generated on Wed Feb 21 22:19:52 2007 for pugixml by 
+
+  1.4.6-NO  pugixml: Class Members 
+
+
+Generated on Wed Feb 21 22:19:52 2007 for pugixml by 
+
+  1.4.6-NO  pugixml: Class Members 
+
+
+format_default
+: pugi  format_indent
+: pugi  format_raw
+: pugi  format_utf8
+: pugi  format_write_bom
+: pugi  memory_block_size
+: pugi  parse_cdata
+: pugi  parse_comments
+: pugi  parse_default
+: pugi  parse_eol
+: pugi  parse_escapes
+: pugi  parse_minimal
+: pugi  parse_pi
+: pugi  parse_wconv_attribute
+: pugi  parse_wnorm_attribute
+: pugi  parse_ws_pcdata
+: pugi   
+Generated on Wed Feb 21 22:19:52 2007 for pugixml by 
+
+  1.4.6-NO  pugixml: pugi Namespace Reference 
+pugi Namespace Reference Detailed Description 
+The PugiXML Parser namespace. 
+
+
+
+
+Classes class   xpath_query   A class that holds compiled XPath query and allows to evaluate query result.  More...  class   xml_attribute   A light-weight wrapper for manipulating attributes in DOM tree.  More...  class   xml_node   A light-weight wrapper for manipulating nodes in DOM tree.  More...  class   xml_node_iterator   Child node iterator.  More...  class   xml_attribute_iterator   Attribute iterator.  More...  class   xml_tree_walker   Abstract tree walker class.  More...  struct   xml_memory_block struct   transfer_ownership_tag   Struct used to distinguish parsing with ownership transfer from parsing without it.  More...  class   xml_document   Document class (DOM tree root).  More...  class   xpath_exception   XPath exception class.  More...  class   xpath_node   XPath node class.  More...  class   xpath_node_set   Not necessarily ordered constant collection of XPath nodes.  More...  Enumerations enum   xml_node_type  { node_null , 
+node_document , 
+node_element , 
+node_pcdata , 
+node_cdata , 
+node_comment , 
+node_pi 
+  Tree node classification.  More...  Functions std::string  as_utf8  (const wchar_t *str)  Convert utf16 to utf8.   std::wstring  as_utf16  (const char *str)  Convert utf8 to utf16.   Variables const size_t  memory_block_size  = 32768  Memory block size, used for fast allocator.   const unsigned int  parse_minimal  = 0x0000  Minimal parsing mode.   const unsigned int  parse_pi  = 0x0001  This flag determines if processing instructions (nodes with type node_pi; such nodes have the form of <? target content ?> or <? target ?> in XML) are to be put in DOM tree.   const unsigned int  parse_comments  = 0x0002  This flag determines if comments (nodes with type node_comment; such nodes have the form of in XML) are to be put in DOM tree.   const unsigned int  parse_cdata  = 0x0004  This flag determines if CDATA sections (nodes with type node_cdata; such nodes have the form of <![CDATA[[content]]> in XML) are to be put in DOM tree.   const unsigned int  parse_ws_pcdata  = 0x0008  This flag determines if nodes with PCDATA (regular text) that consist only of whitespace characters are to be put in DOM tree.   const unsigned int  parse_escapes  = 0x0010  This flag determines if character and entity references are to be expanded during the parsing process.   const unsigned int  parse_eol  = 0x0020  This flag determines if EOL handling (that is, replacing sequences 0x0d 0x0a by a single 0x0a character, and replacing all standalone 0x0d characters by 0x0a) is to be performed on input data (that is, comments contents, PCDATA/CDATA contents and attribute values).   const unsigned int  parse_wnorm_attribute  = 0x0040  This flag determines if attribute value normalization should be performed for all attributes, assuming that their type is not CDATA.   const unsigned int  parse_wconv_attribute  = 0x0080  This flag determines if attribute value normalization should be performed for all attributes, assuming that their type is CDATA.   const unsigned int  parse_default  = parse_cdata  | parse_escapes  | parse_wconv_attribute  | parse_eol   This is the default set of flags.   const unsigned int  format_indent  = 0x01  Indent the nodes that are written to output stream with as many indentation strings as deep the node is in DOM tree.   const unsigned int  format_utf8  = 0x02  This flag determines how the non-printable symbols are written to output stream - they are either considered UTF-8 and are written as UTF-8 character, escaped with &#.   const unsigned int  format_write_bom  = 0x04  This flag determines if UTF-8 BOM is to be written to output stream.   const unsigned int  format_raw  = 0x08  If this flag is on, no indentation is performed and no line breaks are written to output file.   const unsigned int  format_default  = format_indent  | format_utf8   This is the default set of formatting flags.   
+Enumeration Type Documentation 
+
+
+
+  
+    
+       
+     
+    
+
+
+Tree node classification. 
+
+
Enumerator:  
+
+
+Undifferentiated entity.  
+A document tree's absolute root.  
+E.g. '<...>'.  
+E.g. '>...<'.  
+E.g. '<![CDATA[...]]>'.  
+E.g. ''.  
+E.g. '<?...?>'.  
+  
+   
+
+Function Documentation 
+
+
+  
+    
+      
+        
+          std::string pugi::as_utf8            
+          (  
+          const wchar_t *  
+           str            
+           )  
+           
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Convert utf16 to utf8. 
+
+
Parameters: 
+  
+    str  - input UTF16 string  
+ Returns: output UTF8 string   
+   
+
+
+
+  
+    
+      
+        
+          std::wstring pugi::as_utf16            
+          (  
+          const char *  
+           str            
+           )  
+           
+      
+     
+   
+
+
+  
+    
+       
+     
+    
+
+
+Convert utf8 to utf16. 
+
+
Parameters: 
+  
+    str  - input UTF8 string  
+ Returns: output UTF16 string   
+   
+
+Variable Documentation 
+
+
+
+  
+    
+       
+     
+    
+
+
+Memory block size, used for fast allocator. 
+
+Memory for DOM tree is allocated in blocks of memory_block_size + 4. This value affects size of xml_memory class.     
 
+   
+
+
+
+
+  
+    
+       
+     
+    
+
+
+Minimal parsing mode. 
+
+Equivalent to turning all other flags off. This set of flags means that pugixml does not add pi/cdata sections or comments to DOM tree and does not perform any conversions for input data, meaning fastest parsing.     
 
+   
+
+
+
+
+  
+    
+       
+     
+    
+
+
+This flag determines if processing instructions (nodes with type node_pi; such nodes have the form of <? target content ?> or <? target ?> in XML) are to be put in DOM tree. 
+
+If this flag is off, they are not put in the tree, but are still parsed and checked for correctness.
+The corresponding node in DOM tree will have type node_pi, name "target" and value "content", if any.
+Note that <?xml ...?> (document declaration) is not considered to be a PI.
+This flag is off by default.     
 
+   
+
+
+
+
+  
+    
+       
+     
+    
+
+
+This flag determines if comments (nodes with type node_comment; such nodes have the form of in XML) are to be put in DOM tree. 
+
+If this flag is off, they are not put in the tree, but are still parsed and checked for correctness.
+The corresponding node in DOM tree will have type node_comment, empty name and value "content".
+This flag is off by default.     
 
+   
+
+
+
+
+  
+    
+       
+     
+    
+
+
+This flag determines if CDATA sections (nodes with type node_cdata; such nodes have the form of <![CDATA[[content]]> in XML) are to be put in DOM tree. 
+
+If this flag is off, they are not put in the tree, but are still parsed and checked for correctness.
+The corresponding node in DOM tree will have type node_cdata, empty name and value "content".
+This flag is on by default.     
 
+   
+
+
+
+
+  
+    
+       
+     
+    
+
+
+This flag determines if nodes with PCDATA (regular text) that consist only of whitespace characters are to be put in DOM tree. 
+
+Often whitespace-only data is not significant for the application, and the cost of allocating and storing such nodes (both memory and speed-wise) can be significant. For example, after parsing XML string "<node> <a/> </node>", <node> element will have 3 children when parse_ws_pcdata is set (child with type node_pcdata and value=" ", child with type node_element and name "a", and another child with type node_pcdata and value=" "), and only 1 child when parse_ws_pcdata is not set.
+This flag is off by default.     
 
+   
+
+
+
+
+  
+    
+       
+     
+    
+
+
+This flag determines if character and entity references are to be expanded during the parsing process. 
+
+Character references are &#...; or &x...; (... is Unicode numeric representation of character in either decimal (&#...;) or hexadecimal (&x...;) form), entity references are &...; Note that as pugixml does not handle DTD, the only allowed entities are predefined ones - <, >, &, ' and ". If character/entity reference can not be expanded, it is leaved as is, so you can do additional processing later. Reference expansion is performed in attribute values and PCDATA content.
+This flag is on by default.     
 
+   
+
+
+
+
+  
+    
+       
+     
+    
+
+
+This flag determines if EOL handling (that is, replacing sequences 0x0d 0x0a by a single 0x0a character, and replacing all standalone 0x0d characters by 0x0a) is to be performed on input data (that is, comments contents, PCDATA/CDATA contents and attribute values). 
+
+This flag is on by default.     
 
+   
+
+
+
+
+  
+    
+       
+     
+    
+
+
+This flag determines if attribute value normalization should be performed for all attributes, assuming that their type is not CDATA. 
+
+This means, that: 1. Whitespace characters (new line, tab and space) are replaced with space (' ') 2. Afterwards sequences of spaces are replaced with a single space 3. Leading/trailing whitespace characters are trimmed
+This flag is off by default.     
 
+   
+
+
+
+
+  
+    
+       
+     
+    
+
+
+This flag determines if attribute value normalization should be performed for all attributes, assuming that their type is CDATA. 
+
+This means, that whitespace characters (new line, tab and space) are replaced with space (' '). Note, that the actions performed while this flag is on are also performed if parse_wnorm_attribute is on, so this flag has no effect if parse_wnorm_attribute flag is set.
+This flag is on by default.     
 
+   
+
+
+
+
+  
+    
+       
+     
+    
+
+
+This is the default set of flags. 
+
+It includes parsing CDATA sections (comments/PIs are not parsed), performing character and entity reference expansion, replacing whitespace characters with spaces in attribute values and performing EOL handling. Note, that PCDATA sections consisting only of whitespace characters are not parsed (by default) for performance reasons.     
 
+   
+
+
+
+
+  
+    
+       
+     
+    
+
+
+Indent the nodes that are written to output stream with as many indentation strings as deep the node is in DOM tree. 
+
+This flag is on by default.     
 
+   
+
+
+
+
+  
+    
+       
+     
+    
+
+
+This flag determines how the non-printable symbols are written to output stream - they are either considered UTF-8 and are written as UTF-8 character, escaped with &#. 
+
+..;, or they are considered to be ASCII and each ASCII character is escaped separately.
+This flag is on by default.     
 
+   
+
+
+
+
+  
+    
+       
+     
+    
+
+
+This flag determines if UTF-8 BOM is to be written to output stream. 
+
+This flag is off by default.     
 
+   
+
+
+
+
+  
+    
+       
+     
+    
+
+
+If this flag is on, no indentation is performed and no line breaks are written to output file. 
+
+This means that the data is written to output stream as is.
+This flag is off by default.     
 
+   
+
+
+
+
+  
+    
+       
+     
+    
+
+
+This is the default set of formatting flags. 
+
+It includes indenting nodes depending on their depth in DOM tree and considering input data to be UTF-8.     
 
+   
+
+Generated on Wed Feb 21 22:19:50 2007 for pugixml by 
+
+  1.4.6-NO  pugixml: Namespace Index 
+pugixml Namespace List Here is a list of all documented namespaces with brief descriptions:
+  pugi The PugiXML Parser namespace  
+Generated on Wed Feb 21 22:19:50 2007 for pugixml by 
+
+  1.4.6-NO  pugixml: pugi::transfer_ownership_tag Struct Reference 
+pugi::transfer_ownership_tag Struct Reference Detailed Description 
+Struct used to distinguish parsing with ownership transfer from parsing without it. 
+
+
See also: xml_document::parse  
+
+Generated on Wed Feb 21 22:19:51 2007 for pugixml by 
+
+  1.4.6-NO  Contents 
 
   Introduction Document Object Model Documentation 
-	Introduction xml_parser class xml_node class xml_attribute class Iterators Miscellaneous Lifetime issues and memory management Parsing process Quick start Reference W3C compliance Comparison with existing parsers FAQ pugixml  is just another XML parser. This is a successor to
 pugxml  (well, to be honest, the only part
 that is left as is is wildcard matching code; the rest was either heavily refactored or rewritten
-from scratch). The main features (call it USP) are:
+from scratch). The main features are:  
 
 
 low memory consumption and fragmentation (the win over pugxml  is ~1.3 times, TinyXML 
@@ -53,17 +44,17 @@ be seen in Comparison with existing parsers  secti
 times, Xerces-DOM  - ~17.6 times 1  
 extremely high parsing speed (well, I'm repeating myself, but it's so fast, that it outperforms
 Expat  by 2.8 times  on test XML) 2  
-more or less standard-conformant (it will parse any standard-compliant file correctly in w3c-compliance
-mode, with the exception of DTD related issues and XML namespaces) 
+more or less standard-conformant (it will parse any standard-compliant file correctly, with the
+exception of DTD related issues) 
 pretty much error-ignorant (it will not choke on something like <text>You & Me</text>,
-like expat  will; it will try to recover the state even if meeting an error (like finding matching
-tags for closing ones); it will parse files with data in wrong encoding; and so on) 
+like expat  will; it will parse files with data in wrong encoding; and so on)
 clean interface (a heavily refactored pugxml's one) 
 more or less Unicode-aware (actually, it assumes UTF-8 encoding of the input data, though
 it will readily work with ANSI - no UTF-16 for now (see Future work ), with
 helper conversion functions (UTF-8 <-> UTF-16/32 (whatever is the default for std::wstring & wchar_t)) 
-fully standard compliant code (approved by Comeau 
-strict mode), multiplatform (tested on win32 only ^_^) 
+fully standard compliant C++ code (approved by Comeau 
+strict mode); the library is multiplatform (see reference  for platforms
+list) 
 high flexibility. You can control many aspects of file parsing and DOM tree building via parsing
 options.
   
@@ -84,10 +75,8 @@ ok with DOM - it should not be a problem, because the overall memory consumption
 you'll need a contiguous chunk of memory, which can be a problem).
 lack of validation, DTD processing, XML namespaces, proper handling of encoding. If you need those -
 go take MSXML or XercesC or anything like that. 
-lack of XPath & UTF-16/32 parsing. These are not implemented for now, but they are the features
-for the next release. 
-immutability of DOM tree. It's constant. You can't change it. There are good reasons for prohibiting
-that, though it is a thing that will likely be in the next release. 
+lack of UTF-16/32 parsing. This is not implemented for now, but this is the features for the next
+release. 
 
 
 
-Document Object Model 
+ 
+Quick start 
 
-pugixml  is a DOM-based parser. This means, that the XML document is converted to a tree.
-Each XML tag is converted to a node in DOM tree. If a tag is contained in some other tag, its node
-is a child to the outer tag's one. Comments, CDATA sections and PIs (Processing Instructions) also are
-transformed into tree nodes, as is the standalone text. Each node has its type.
+Here there is a small collection of code snippets to help the reader begin using pugixml .
 
-Here is an example of an XML document:
+
For everything you can do with pugixml , you need a document. There are several ways to obtain it:
 
-
-<? xml  version = "1.0" ?> 
-< mesh  name = " mesh_root " > 
-    <!--  here is a mesh node  --> 
-    some text
-    <![CDATA[ [someothertext]]> 
-    some more text
-    < node  attr1 = " value1 "  /> 
-    < node  attr1 = " value2 " > 
-        <? TARGET  somedata ?> 
-        < innernode /> 
-    </ node > 
-</ mesh > 
- 
-
-It gets converted to the following tree (note, that with some parsing options comments, PIs and CDATA
-sections are not stored in the tree, and with some options there are also nodes with whitespaces
-and the contents of PCDATA sections is a bit different (with trailing/leading whitespaces). So generally
-the resulting DOM tree depends on the parsing options):
-
-
-
-The parent-children relations are shown with lines. Some nodes have previous and next siblings
-(for example, the next sibling for node_comment node is node_pcdata with value "some text", and the
-previous sibling for node_element with name "mesh" is node_pi with target "xml" (target for PI nodes
-is stored in the node name)).
- 
-Documentation 
-
- 
-Introduction 
-
-pugixml  is a library for parsing XML files, which means that you give it XML data some way,
-and it gives you the DOM tree and the ways to traverse it and to get some useful information from it.
-The library source consist of two files, the header pugixml.hpp , and the source code pugixml.cpp .
-You can either compile cpp file in your project, or build a static library (or perhaps even a DLL),
-or make the whole code use inline linkage and make one big file (as it was done in pugxml ).
-All library classes reside in namespace pugi , so you can either use fully qualified
-names (pugi::xml_node ) or write a using declaration (using namespace pugi; , using
-pugi::xml_node ) and use plain names. All classes have the xml_  prefix.
-
-By default it's supposed that you compile the source file with your project (add it into your
-project, or add relevant entry in your Makefile, or do whatever you need to do with your compilation
-environment). The library is written in standard-conformant C++ and was tested on win32 platform
-(MSVC 7.1 (2003), MSVC 8.0 (2005)).
-
- 
-xml_parser class 
-
-xml_parser  class is the core of parsing process; you initiate parsing with it, you get DOM
-tree from it, the nodes and attributes are stored in it. You have two ways to load a file: either
-provide a string with XML-data (it has to be null-terminated, and it will be modified during parsing
-process, so it can not be a piece of read-only memory), or with an std::istream  object (any input
-stream, like std::ifstream , std::istringstream , etc.) - in this case the parser will allocate
-the necessary amount of memory (equivalent to stream's size) and read everything from the stream.
-
-The functions for parsing are:
-
-
-
-        void parse(std::istream&  stream,  unsigned int optmsk  =  parse_noset);  
- This function will create a buffer with the size equal to that of provided stream,
-read the chunk of data from the stream and parse it with provided options (optmsk).
-The stream does not have to persist after the call to the function, the lifetime of internal buffer
-with stream's data is managed by pugixml .
- 
-
-  
-
-
-        char *  parse( char *  xmlstr,  unsigned int optmsk  =  parse_noset); 
- 
- This function parses the provided string with provided options, and returns the position where the
-parsing stopped (do not expect, that parsing will stop on every error, or on most of them - as I've
-said, pugixml  is error ignorant). The input string is modified. The string must persist for the
-lifetime of the parser.
-
-   
-
-
-        char *  parse( const ownership_transfer_tag&,  char *  xmlstr,  unsigned int optmsk  =  parse_noset); 
- 
- This function parses the provided string with provided options, and returns the position where the
-parsing stopped (do not expect, that parsing will stop on every error, or on most of them - as I've
-said, pugixml  is error ignorant). The input string is modified. The string's ownership is
-managed by parser (string's memory is freed automatically when parser's destructor is called).
-   
-
-
-        xml_parser(std::istream&  stream,  unsigned int optmsk  =  parse_default);  
- Just a convenience ctor, that calls the corresponding parse() function. 
-
-  
-
-
-        xml_parser( char *  xmlstr,  unsigned int optmsk  =  parse_default);  
- Just a convenience ctor, that calls the corresponding parse() function. 
-
-  
-
 
-        xml_parser( const ownership_transfer_tag&,  char *  xmlstr,  unsigned int optmsk  =  parse_default);  
- Just a convenience ctor, that calls the corresponding parse() function. 
-
- 
-
-If you want to provide XML data after the creation of the parser, use the default ctor. Otherwise
-you are free to use either parsing ctors or default ctor and later - parsing function.
-
-After parsing an XML file, you'll get a DOM tree. To get access to it (or, more precisely, to its
-root), call either document()  function or cast xml_parser  object to xml_node  by
-using the following functions:
-
- 
-        operator xml_node()  const ; 
-        xml_node  document()  const ; 
- 
-
-Ok, easy part is behind - now let's dive into parsing options. There is a variety of them, and you
-must choose them wisely to get the needed results and the best speed/least memory overhead. At first,
-there are flags that determine which parts of the document will be put into DOM tree, and which will
-be just skipped:
-
-
-If parse_pi  is on, then processing instructions (<? ... ?> ) are put into DOM
-tree (with node type node_pi ) otherwise they are discarded. Note that for now the prolog
-(<?xml ... ?>) is parsed as a processing instruction.
- 
-If parse_comments  is on, then comments (<!-- ... --> ) are put into DOM
-tree (with node type node_comment ) otherwise they are discarded.
- 
-If parse_cdata  is on, then the content of CDATA section (<![CDATA[[ ... ]]> )
-is put into DOM tree (with node type node_cdata ) otherwise it is discarded.
- 
-If parse_ws_pcdata  is off, then the content of PCDATA section (it's the plain text
-in the node, like in <some_tag>Hello!</some_tag> ) is discarded if it consists only
-of space-like characters (spaces, tabs and newlines).
- 
-If parse_ext_pcdata  is off, then the content of PCDATA section is discarded if it belongs
-to root (document) node, that is it does not have a parent tag.
- 
- 
-
-Then there are flags that determine how the processing of the retrieved data is done. There are
-several reasons for these flags, mainly:
-
-parsing speed. The less processing - the more speed. 
-data fetching comfort. Sometimes you're ok with messed linefeeds, sometimes you're not. Sometimes
-you want your PCDATA trimmed, sometimes you do not. Sometimes you want your attribute values normalized,
-sometimes you do not. Some of these are normally specified in DOCTYPE, though...
- ...parser is not DOCTYPE aware (and will never be), so you need a way to set those properties -
-if not on per-node basis, then on per-document 
- 
-So, these are the processing flags:
-
-
-
-If parse_escapes  is on, then the character reference expansion is done for PCDATA content
-and for attribute values (replacing <lt; with <, c; with L, etc.).
- 
-If parse_wnorm_attribute  is on, then the whitespace normalisation is done for attribute
-values (this includes replacing any space-like character by a space character, converting sequences of
-spaces into a single space and trimming of leading/trailing spaces)
- 
-If parse_wconv_attribute  is on, then the whitespace conversion is done for attribute
-values (this is a subset of whitespace normalization, and includes only replacing space-like characters
-with spaces). If parse_wnorm_attribute  is on, this flag has no effect.
- 
-If parse_eol  is on, then the end-of-line handling is done for PCDATA/CDATA content and for
-attribute values (this includes converting any pair of 0x0d 0x0a characters to a single 0x0a and
-converting any standalone 0x0d to 0x0a).
- 
- 
-
-Finally, there are two more flags, that indicate closing tag parsing. When pugixml  meets a
-close tags, there are three ways:
-
-check that the tag name matches the opening tag, return an error if it does not. This is a
-standard-compliant way, is controlled by parse_check_end_tags  flag, which is on in W3C mode 
-try to find the corresponding tag name (so that <foo> <bar> </foo>  will be parsed
-correctly). This is controlled by parse_match_end_tags , which is on by default 
-just treat the tag as a closing tag for the node (so that <foo> ... </bar>  will
-be parsed as <foo> ... </foo> ). This is the fastest way, and this is what pugxml 
-is doing, but it can corrupt your DOM tree. This way is chosen if both parse_check_end_tags  and
-parse_match_end_tags  are off.
-  
-Note, that these 2 flags are mutually exclusive.
-
-
-Did I say finally? Ok, so finally  there are some helper flags, or better groups of flags.
-These are:
-
-parse_minimal  - no flag is set (this also means the fastest parsing)parse_default  - default set of flagsparse_noset  - use the current parser options (see below)parse_w3c  - use the W3C compliance mode 
-
-
-A couple of words on flag usage. The parsing options are just a set of bits, with each bit corresponding
-to one flag. You can turn the flag on by OR-ing the options value with this flag's constant:
-
-	parse_w3c | parse_wnorm_attribute
- 
-or turn the flag off by AND-ing the options value with the NEGation of this flag's constant:
-
-	parse_w3c & ~parse_comments
- 
-You can access the current options of parser by options()  method:
-
-        unsigned int options()  const ; 
-        unsigned int options( unsigned int optmsk); 
- 
-(the latter one returns previous options). These options are used when parse_noset  flag set is
-passed to parse()  functions (which is the default value of corresponding parameter).
-
-
-
-xml_node class 
-
-If xml_parser  is a heart of constructing a DOM tree from file, xml_node  is a heart
-of processing the tree. This is a simple wrapper, so it's small (4/8 bytes, depending on the size of
-pointer), you're free to copy it and it does not own anything. I'll continue with a list of methods
-with their description, with one note in advance. Some functions, that do something according to a
-string-like parameter, have a pair with a suffix _w . The _w  suffix tells, that this
-function is doing a wildcard matching, instead of simple string comparison. You're free to use wildcards
-*  (that is equal to any sequence of characters (possibly empty)), ?  (that is equal to
-any character) and character sets ([Abc]  means 'any symbol of A, b and c', [A-Z4]  means
-'any symbol from A to Z, or 4', [!0-9]  means 'any symbol, that is not a digit'). So the wildcard
-?ell_[0-9][0-9]_*  will match strings like 'cell_23_xref', 'hell_00_', but will not match the
-strings like 'ell_23_xref', 'cell_0_x' or 'cell_0a_x'.
-
- 
-        /// Access iterators for this node's collection of child nodes. iterator  begin()  const ; 
-        iterator  end()  const ; 
-        
-        /// Access iterators for this node's collection of child nodes (same as begin/end). iterator  children_begin()  const ; 
-        iterator  children_end()  const ; 
-    
-        /// Access iterators for this node's collection of attributes. attribute_iterator  attributes_begin()  const ; 
-        attribute_iterator  attributes_end()  const ; 
-
-        /// Access iterators for this node's collection of siblings. iterator  siblings_begin()  const ; 
-        iterator  siblings_end()  const ; 
- 
-
-Functions, returning the iterators to walk through children/siblings/attributes. More on that in
-Iterators  section.
-	
-
-        operator unspecified_bool_type()  const ; 
- 
-
-This is a safe bool-like conversion operator. You can check node's validity (if (xml_node) ,
- if (!xml_node) , if (node1 && node2 && !node3 && cond1 && ...)  - you get the idea) with
-it.
-
-
-
-        bool operator ==( const xml_node&  r)  const ; 
-        bool operator !=( const xml_node&  r)  const ; 
-        bool operator <( const xml_node&  r)  const ; 
-        bool operator >( const xml_node&  r)  const ; 
-        bool operator <=( const xml_node&  r)  const ; 
-        bool operator >=( const xml_node&  r)  const ; 
- 
-
-Comparison operators
-
-
-
-if (node.empty()) is equivalent to if (!node)
-
-
-        xml_node_type  type()  const ; 
-        const char *  name()  const ; 
-        const char *  value()  const ; 
- 
-
-Access node's properties (type, name and value). If there is no name/value, the corresponding functions
-return ""  - they never  return NULL.
	
-
-
-        xml_node  child( const char *  name)  const ; 
-        xml_node  child_w( const char *  name)  const ; 
- 
-
-Get a child node with specified name, or xml_node()  (this is an invalid node) if nothing is
-found
-
-
-        xml_attribute  attribute( const char *  name)  const ; 
-        xml_attribute  attribute_w( const char *  name)  const ; 
- 
-
-Get an attribute with specified name, or xml_attribute()  (this is an invalid attribute) if
-nothing is found
-
-
-        xml_node  sibling( const char *  name)  const ; 
-        xml_node  sibling_w( const char *  name)  const ; 
- 
-
-Get a node's sibling with specified name, or xml_node()  if nothing is found.node.sibling(name) is equivalent to node.parent().child(name).
-
-
-        xml_node  next_sibling( const char *  name)  const ; 
-        xml_node  next_sibling_w( const char *  name)  const ; 
-        xml_node  next_sibling()  const ; 
- 
-
-These functions get the next sibling, that is, one of the siblings of that node, that is to the
-right. next_sibling() just returns the right brother of the node (or xml_node() ),
-the two other functions are searching for the sibling with the given name
-
-
-        xml_node  previous_sibling( const char *  name)  const ; 
-        xml_node  previous_sibling_w( const char *  name)  const ; 
-        xml_node  previous_sibling()  const ; 
- 
-
-These functions do exactly the same as next_sibling ones, with the exception that they
-search for the left siblings.
-
-
-        xml_node  parent()  const ; 
- 
-
-Get a parent node. The parent node for the root one (the document) is considered to be the document
-itself.
-
-
-        const char *  child_value()  const ; 
- 
-
-Look for the first node of type node_pcdata  or node_cdata  among the
-children of the current node and return its contents (or ""  if nothing is found)
-
-
-    const char *  child_value( const char *  name)  const ; 
- 
+#include  <fstream> 
+#include  <iostream> 
 
-This is the convenient way of looking into child's child value - that is, node.child_value(name) is equivalent to node.child(name).child_value().
+#include  "pugixml.hpp" 
 
-
-    const char *  child_value_w( const char *  name)  const ; 
- 
+using namespace std; 
+using namespace pugi; 
 
-This is the convenient way of looking into child's child value - that is, node.child_value_w(name) is equivalent to node.child_w(name).child_value().
+int main() 
+{ 
+    // Several ways to get XML document 
-        xml_attribute  first_attribute()  const ; 
-        xml_attribute  last_attribute()  const ; 
- 
+    { 
+        // Load from string xml_document  doc; 
 
-These functions get the first and last attributes of the node (or xml_attribute()  if the node
-has no attributes).
+        cout  <<  doc.load( "<sample-xml>some text <b>in bold</b> here</sample-xml>" )  <<  endl; 
+    } 
 
-
-        xml_node  first_child()  const ; 
-        xml_node  last_child()  const ; 
- 
+    { 
+        // Load from file xml_document  doc; 
 
-These functions get the first and last children of the node (or xml_node()  if the node has
-no children).
+        cout  <<  doc.load_file( "sample.xml" )  <<  endl; 
+    } 
 
-
-        template < typename OutputIterator>  void all_elements_by_name( const char *  name,  OutputIterator  it)  const ; 
-        template < typename OutputIterator>  void all_elements_by_name_w( const char *  name,  OutputIterator  it)  const ; 
- 
+    { 
+        // Load from any input stream (STL) xml_document  doc; 
 
-Get all elements with the specified name in the subtree (depth-first search) and return them with
-the help of output iterator (i.e. std::back_inserter)
+        std::ifstream  in( "sample.xml" ); 
+        cout  <<  doc.load(in)  <<  endl; 
+    } 
 
-
-        template < typename Predicate>  xml_attribute  find_attribute(Predicate  pred)  const ; 
-        template < typename Predicate>  xml_node  find_child(Predicate  pred)  const ; 
-        template < typename Predicate>  xml_node  find_element(Predicate  pred)  const ; 
- 
+    { 
+        // More advanced: parse the specified string without duplicating it xml_document  doc; 
 
-Find attribute, child or a node in the subtree (find_element - depth-first search) with the help
-of the given predicate. Predicate should behave like a function which accepts a xml_node  or
-xml_attribute  (for find_attribute) parameter and returns bool . The first entity for which
-the predicate returned true is returned. If predicate returned false for all entities, xml_node() 
-or xml_attribute()  is returned.
+        char *  s  =  new  char [ 100 ]; 
+        strcpy(s,  "<sample-xml>some text <b>in bold</b> here</sample-xml>" ); 
+        cout  <<  doc.parse(transfer_ownership_tag(),  s)  <<  endl; 
+    } 
 
-
-        xml_node  first_element( const char *  name)  const ; 
-        xml_node  first_element_w( const char *  name)  const ; 
+    { 
+        // Even more advanced: assume manual lifetime control xml_document  doc; 
 
-        xml_node  first_element_by_value( const char *  name,  const char *  value)  const ; 
-        xml_node  first_element_by_value_w( const char *  name,  const char *  value)  const ; 
+        char *  s  =  new  char [ 100 ]; 
+        strcpy(s,  "<sample-xml>some text <b>in bold</b> here</sample-xml>" ); 
+        cout  <<  doc.parse(transfer_ownership_tag(),  s)  <<  endl; 
 
-        xml_node  first_element_by_attribute( const char *  name,  const char *  attr_name,  const char *  attr_value)  const ; 
-        xml_node  first_element_by_attribute_w( const char *  name,  const char *  attr_name,  const char *  attr_value)  const ; 
+        delete[]  s;  // <-- after this point, all string contents of document is invalid! } 
 
-        xml_node  first_element_by_attribute( const char *  attr_name,  const char *  attr_value)  const ; 
-        xml_node  first_element_by_attribute_w( const char *  attr_name,  const char *  attr_value)  const ; 
- 
+    { 
+        // Or just create document from code? xml_document  doc; 
 
-Find the first node (depth-first search), which corresponds to the given criteria (i.e. either has
-a matching name, or a matching value, or has an attribute with given name/value, or has an attribute
-and has a matching name). Note that _w  versions treat all parameters as wildcards.
+        // add nodes to document (see next samples) } 
+} 
+_Winnie C++ Colorizer 
-        xml_node  first_node(xml_node_type  type)  const ; 
- 
+This sample should print a row of 1, meaning that all load/parse functions returned true (of course, if sample.xml does not exist or is malformed, there will be 0's)
 
-Return a first node (depth-first search) with a given type, or xml_node() .
+Once you have your document, there are several ways to extract data from it.
 
 
-        std::string  path( char delimiter  =  '/' )  const ; 
- 
+#include  <iostream> 
 
-Get a path of the node (i.e. the string of names of the nodes on the path from the DOM tree root
-to the node, separated with delimiter (/ by default).
+#include  "pugixml.hpp" 
 
-
-        xml_node  first_element_by_path( const char *  path,  char delimiter  =  '/' )  const ; 
- 
+using namespace std; 
+using namespace pugi; 
 
-Get the first element that has the following path. The path can be absolute (beginning with delimiter) or
-relative, '..' means 'up-level' (so if we are at the path mesh/fragment/geometry/stream , ../.. 
-will lead us to mesh/fragment , and /mesh  will lead us to mesh ).
+struct bookstore_traverser:  public xml_tree_walker 
+{ 
+    virtual bool for_each(xml_node&  n) 
+    { 
+        for ( int i  =  0 ;  i  <  depth();  ++i)  cout  <<  "  " ;  // indentation 
-        bool traverse(xml_tree_walker&  walker)  const ; 
- 
+        if (n.type()  ==  node_element)  cout  <<  n.name()  <<  endl; 
+        else cout  <<  n.value()  <<  endl; 
 
-Traverse the subtree (beginning with current node) with the walker, return the result. See
-Miscellaneous  section for details.
+        return true ;  // continue traversal } 
+}; 
 
-
-xml_attribute class 
+int main() 
+{ 
+    xml_document  doc; 
+    doc.load( "<bookstore><book title='ShaderX'><price>3</price></book><book title='GPU Gems'><price>4</price></book></bookstore>" ); 
 
-Like xml_node , xml_attribute  is a simple wrapper of the node's attribute.
+    // If you want to iterate through nodes...  
-        bool operator ==( const xml_attribute&  r)  const ; 
-        bool operator !=( const xml_attribute&  r)  const ; 
-        bool operator <( const xml_attribute&  r)  const ; 
-        bool operator >( const xml_attribute&  r)  const ; 
-        bool operator <=( const xml_attribute&  r)  const ; 
-        bool operator >=( const xml_attribute&  r)  const ; 
- 
+    { 
+        // Get a bookstore node xml_node  bookstore  =  doc.child( "bookstore" ); 
 
-Comparison operators.
	
+        // Iterate through books for (xml_node  book  =  bookstore.child( "book" );  book;  book  =  book.next_sibling( "book" )) 
+        { 
+            cout  <<  "Book "  <<  book.attribute( "title" ).value()  <<  ", price "  <<  book.child( "price" ).first_child().value()  <<  endl; 
+        } 
 
-
-        operator unspecified_bool_type()  const ; 
- 
+        // Output: // Book ShaderX, price 3 // Book GPU Gems, price 4 } 
 
-Safe bool conversion - like in xml_node , use this to check for validity.
+    { 
+        // Alternative way to get a bookstore node (wildcards) xml_node  bookstore  =  doc.child_w( "*[sS]tore" );  // this will select bookstore, anyStore, Store, etc. // Iterate through books with STL compatible iterators for (xml_node::iterator  it  =  bookstore.begin();  it  !=  bookstore.end();  ++it) 
+        { 
+            // Note the use of helper function child_value() cout  <<  "Book "  <<  it->attribute( "title" ).value()  <<  ", price "  <<  it->child_value( "price" )  <<  endl; 
+        } 
+        
+        // Output: // Book ShaderX, price 3 // Book GPU Gems, price 4 } 
 
-Like with xml_node , if (attr.empty()) is equivalent to if (!attr).
-
+    { 
+        // You can also traverse the whole tree (or a subtree) bookstore_traverser  t; 
 
-
-        xml_attribute  next_attribute()  const ; 
-        xml_attribute  previous_attribute()  const ; 
- 
+        doc.traverse(t); 
+        
+        // Output: // bookstore //   book //     price //       3 //   book //     price //       4 doc.first_child().traverse(t); 
+
+        // Output: // book //   price //     3 // book //   price //     4 } 
 
-Get the next/previous attribute of the node, that owns the current attribute. Return xml_attribute() 
-if no such attribute is found.
+    // If you want a distinct node... 
-        const char *  name()  const ; 
-        const char *  value()  const ; 
- 
+    { 
+        // You can specify the way to it through child() functions cout  <<  doc.child( "bookstore" ).child( "book" ).next_sibling().attribute( "title" ).value()  <<  endl; 
 
-Get the name and value of the attribute. These methods never return NULL - they return ""  instead.
+        // Output: // GPU Gems // You can use a sometimes convenient path function cout  <<  doc.first_element_by_path( "bookstore/book/price" ).child_value()  <<  endl; 
+        
+        // Output: // 3 
-        int as_int()  const ; 
-        double as_double()  const ; 
-        float as_float()  const ; 
- 
+        // And you can use powerful XPath expressions cout  <<  doc.select_single_node( "/bookstore/book[@title = 'ShaderX']/price" ).node().child_value()  <<  endl; 
+        
+        // Output: // 3 Convert the value of an attribute to the desired type. If the conversion is not successfull, return
-default value (0 for int, 0.0 for double, 0.0f for float). These functions rely on CRT functions ato*.
+        // Of course, XPath is much more powerful 
-        bool as_bool()  const ; 
- 
+        // Compile query that prints total price of all Gems book in store xpath_query  query( "sum(/bookstore/book[contains(@title, 'Gems')]/price)" ); 
 
-Convert the value of an attribute to bool. This method returns true if the first character of the
-value is '1', 't', 'T', 'y' or 'Y'. Otherwise it returns false.
+        cout  <<  query.evaluate_number(doc)  <<  endl; 
 
-
-Iterators 
+        // Output: // 4 Sometimes you have to cycle through the children or the attributes of the node. You can do it either
-by using next_sibling , previous_sibling , next_attribute  and previous_attribute 
-(along with first_child , last_child , first_attribute  and last_attribute ),
-or you can use an iterator-like interface. There are two iterator types, xml_node_iterator  and
-xml_attribute_iterator . They are bidirectional constant iterators, which means that you can
-either increment or decrement them, and use dereferencing and member access operators to get constant
-access to node/attribute (the constness of iterators may change with the introducing of mutable trees).
+        // You can apply the same XPath query to any document. For example, let's add another Gems // book (more detail about modifying tree in next sample): xml_node  book  =  doc.child( "bookstore" ).append_child(); 
+        book.set_name( "book" ); 
+        book.append_attribute( "title" )  =  "Game Programming Gems 2" ; 
+        
+        xml_node  price  =  book.append_child(); 
+        price.set_name( "price" ); 
 
-In order to get the iterators, use corresponding functions of xml_node . Note that _end() 
-functions return past-the-end iterator, that is, in order to get the last attribute, you'll have to
-do something like:
+        xml_node  price_text  =  price.append_child(node_pcdata); 
+        price_text.set_value( "5.3" ); 
+    
+        // Now let's reevaluate query cout  <<  query.evaluate_number(doc)  <<  endl; 
 
-
 
-    if (node.attributes_begin()  !=  node.attributes_end())  // we have at least one attribute { 
-        xml_attribute  last_attrib  =  *(--node.attributes_end()); 
-        ... 
+        // Output: // 9.3 } 
- 
-
-
-
-Miscellaneous 
-
-If you want to traverse a subtree, you can use traverse  function. There is a class
-xml_tree_walker , which has some functions that you can override in order to get custom traversing
-(the default one just does nothing).
-
-
 
-        virtual bool begin( const xml_node&); 
-        virtual bool end( const xml_node&); 
- 
-
-These functions are called when the processing of the node starts/ends. First begin() 
-is called, then all children of the node are processed recursively, then end()  is called. If
-any of these functions returns false, the traversing is stopped and the traverse()  function
-returns false.
-
-
-        virtual void push(); 
-        virtual void pop(); 
- 
+} 
+_Winnie C++ Colorizer These functions are called before and after the processing of node's children. If node has no children,
-none of these is called. The default behavior is to increment/decrement current node depth.
+Finally, let's get into more details about tree modification and saving.
 
 
-        virtual int depth()  const ; 
- 
-
-Get the current depth. You can use this function to do your own indentation, for example.
-
-Lets get to some minor notes. You can safely write something like:
+#include  <iostream> 
 
-
-        bool value  =  node.child( "stream" ).attribute( "compress" ).as_bool(); 
- 
-
-If node has a child with the name 'geometry', and this child has an attribute 'compress', than everything
-is ok. If node has a child with the name 'geometry' with no attribute 'compress', then attribute("compress")
-will return xml_attribute(), and the corresponding call to as_bool() will return default value (false).
-If there is no child node 'geometry', the child(...) call will return xml_node(), the subsequent call
-to attribute(...) will return xml_attribute() (because there are no attributes belonging to invalid
-node), and as_bool() will again return false, so this call sequence is perfectly safe.
-
-
-Lifetime issues and memory management 
-
-As parsing is done in-situ, the XML data is to persist during the lifetime of xml_parser . If
-the parsing is called via a function of xml_parser , that accepts char* , you have to ensure
-yourself, that the string will outlive the xml_parser  object.
-
-The memory for nodes and attributes is allocated in blocks of data (the blocks form a linked list;
-the default size of the block is 32 kb, though you can change it via changing a memory_block_size 
-constant in pugixml.hpp  file. Remember that the first block is allocated on stack (it resides
-inside xml_parser  object), and all subsequent blocks are allocated on heap, so expect a stack overflow
-when setting too large memory block size), so the xml_parser  object (which contains the blocks)
-should outlive all xml_node  and xml_attribute  objects (as well as iterators), which belong
-to the parser's tree. Again, you should ensure it yourself.
+#include  "pugixml.hpp" 
 
-using namespace std; 
+using namespace pugi; 
 
- 
-Example 
+int main() 
+{ 
+    // For this example, we'll start with an empty document and create nodes in it from code xml_document  doc; 
 
-Ok, so you are not much of documentation reader, are you? So am I. Let's assume that you're going
-to parse an xml file... something like this:
+    // Append several children and set values/names at once doc.append_child(node_comment).set_value( "This is a test comment" ); 
+    doc.append_child().set_name( "application" ); 
 
-
-<? xml  version = "1.0"  encoding = "UTF-8" ?> 
-< mesh  name = " Cathedral " > 
-    < fragment  name = " Cathedral " >     
-        < geometry > 
-            < stream  usage = " main "  source = " StAnna.dmesh "  compress = " true "  /> 
-            < stream  usage = " ao "  source = " StAnna.ao "  /> 
-        </ geometry > 
-    </ fragment > 
-    < fragment  name = " Cathedral " >     
-    	...
-    </ fragment > 
-	...
-</ mesh > 
- 
+    // Let's add a few modules xml_node  application  =  doc.child( "application" ); 
 
-<mesh> is a root node, it has 0 or more <fragment>s, each of them has a <geometry>
-node, and there are <stream> nodes with the shown attributes. We'd like to parse the file and...
-well, and do something with it's contents. There are several methods of doing that; I'll show 2 of them
-(the remaining one is using iterators).
+    // Save node wrapper for convenience xml_node  module_a  =  application.append_child(); 
+    module_a.set_name( "module" ); 
+    
+    // Add an attribute, immediately setting it's value module_a.append_attribute( "name" ).set_value( "A" ); 
 
-Here we exploit the knowledge of the strict hierarchy of our XML document and read the nodes from
-DOM tree accordingly. When we have an xml_node  object, we can get the desired information from
-it (name, value, attributes list, nearby nodes in a tree - siblings, parent and children).
+    // You can use operator= module_a.append_attribute( "folder" )  =  "/work/app/module_a" ; 
 
- 
-#include  <fstream> 
-#include  <vector> 
-#include  <algorithm> 
-#include  <iterator> 
+    // Or even assign numbers module_a.append_attribute( "status" )  =  85.4 ; 
 
-#include  "pugixml.hpp" 
+    // Let's add another module xml_node  module_c  =  application.append_child(); 
+    module_c.set_name( "module" ); 
+    module_c.append_attribute( "name" )  =  "C" ; 
+    module_c.append_attribute( "folder" )  =  "/work/app/module_c" ; 
 
-using namespace pugi; 
+    // Oh, we missed module B. Not a problem, let's insert it before module C xml_node  module_b  =  application.insert_child_before(node_element,  module_c); 
+    module_b.set_name( "module" ); 
+    module_b.append_attribute( "folder" )  =  "/work/app/module_b" ; 
 
-int main() 
-{ 
-    std::ifstream  in( "mesh.xml" ); 
-    in.unsetf(std::ios::skipws); 
-                
-    std::vector< char >  buf; 
-    std::copy(std::istream_iterator< char >(in),  std::istream_iterator< char >(),  std::back_inserter(buf)); 
-    buf.push_back( 0 );  // zero-terminate // We can do the same thing for attributes module_b.insert_attribute_before( "name" ,  module_b.attribute( "folder" ))  =  "B" ; 
     
-    xml_parser  parser(&buf[ 0 ],  pugi::parse_w3c); 
+    // Let's add some text in module A module_a.append_child(node_pcdata).set_value( "Module A description" ); 
 
-    xml_node  doc  =  parser.document(); 
-        
-    if (xml_node  mesh  =  doc.first_element( "mesh" )) 
-    { 
-        // store mesh.attribute("name").value() // Well, there's not much left to do here. Let's output our document to file using several formatting options for (xml_node  fragment  =  mesh.first_element( "fragment" );  fragment;  fragment  =  fragment.next_sibling()) 
-        { 
-            // store fragment.attribute("name").value() doc.save_file( "sample_saved_1.xml" ); 
     
-            if (xml_node  geometry  =  fragment.first_element( "geometry" )) 
-                for (xml_node  stream  =  geometry.first_element( "stream" );  stream;  stream  =  stream.next_sibling()) 
-                { 
-                    // store stream.attribute("usage").value() // store stream.attribute("source").value() if (stream.attribute( "compress" )) 
-                        // store stream.attribute("compress").as_bool() // Contents of file sample_saved_1.xml (tab size = 4): // <?xml version="1.0"?> // <!--This is a test comment--> // <application> //     <module name="A" folder="/work/app/module_a" status="85.4">Module A description</module> //     <module name="B" folder="/work/app/module_b" /> //     <module name="C" folder="/work/app/module_c" /> // </application> // Let's use two spaces for indentation instead of tab character doc.save_file( "sample_saved_2.xml" ,  "  " ); 
+
+    // Contents of file sample_saved_2.xml: // <?xml version="1.0"?> // <!--This is a test comment--> // <application> //   <module name="A" folder="/work/app/module_a" status="85.4">Module A description</module> //   <module name="B" folder="/work/app/module_b" /> //   <module name="C" folder="/work/app/module_c" /> // </application> } 
-        } 
-    } 
-} 
- 
+    // Let's save a raw XML file doc.save_file( "sample_saved_3.xml" ,  "" ,  format_raw); 
+    
+    // Contents of file sample_saved_3.xml: // <?xml version="1.0"?><!--This is a test comment--><application><module name="A" folder="/work/app/module_a" status="85.4">Module A description</module><module name="B" folder="/work/app/module_b" /><module name="C" folder="/work/app/module_c" /></application> We can also write a class that will traverse the DOM tree and store the information from nodes based
-on their names, depths, attributes, etc. This way is well known by the users of SAX parsers. To do that,
-we have to write an implementation of xml_tree_walker  interface 
+    // Finally, you can print a subtree to any output stream (including cout) doc.child( "application" ).child( "module" ).print(cout); 
 
-                   
-#include  <fstream> 
-#include  <vector> 
-#include  <algorithm> 
-#include  <iterator> 
+    // Output: // <module name="A" folder="/work/app/module_a" status="85.4">Module A description</module> } 
+ _Winnie C++ Colorizer 
 
-#include  "pugixml.hpp" 
+Note, that these examples do not cover the whole pugixml  API. For further information, look into reference section.
 
-using namespace pugi; 
+struct mesh_parser:  public xml_tree_walker 
-{ 
-    virtual bool begin( const xml_node&  node) 
-    { 
-        if (strcmp(node.name(),  "mesh" )  ==  0 ) 
-        { 
-            // store node.attribute("name").value() } 
-        else if (strcmp(node.name(),  "fragment" )  ==  0 ) 
-        { 
-            // store node.attribute("name").value() }    
-        else if (strcmp(node.name(),  "geometry" )  ==  0 ) 
-        { 
-            // ... } 
-        else if (strcmp(node.name(),  "stream" )  ==  0 ) 
-        { 
-            // store node.attribute("usage").value() // store node.attribute("source").value() if (node.attribute( "compress" )) 
-                // store stream.attribute("compress").as_bool() } 
-        else return false ; 
+
+Reference 
 
-        return true ; 
-    } 
-}; 
+pugixml  is a library for parsing XML files, which means that you give it XML data some way,
+and it gives you the DOM tree and the ways to traverse it and to get some useful information from it.
+The library source consist of two headers, pugixml.hpp  and pugiconfig.hpp , and two source
+files, pugixml.cpp  and pugixpath.cpp .
+You can either compile cpp files in your project, or build a static library.
+All library classes reside in namespace pugi , so you can either use fully qualified
+names (pugi::xml_node ) or write a using declaration (using namespace pugi; , using
+pugi::xml_node ) and use plain names. All classes have eitther xml_  or xpath_  prefix.
 
-int main() 
-{ 
-    std::ifstream  in( "mesh.xml" ); 
-    in.unsetf(std::ios::skipws); 
-                
-    std::vector< char >  buf; 
-    std::copy(std::istream_iterator< char >(in),  std::istream_iterator< char >(),  std::back_inserter(buf)); 
-    buf.push_back( 0 );  // zero-terminate xml_parser  parser(&buf[ 0 ],  pugi::parse_w3c); 
+By default it's supposed that you compile the source file with your project (add it into your
+project, or add relevant entry in your Makefile, or do whatever you need to do with your compilation
+environment). The library is written in standard-conformant C++ and was tested on following platforms:
 
-    mesh_parser  mp; 
+
+
+Windows 32-bit (MSVC3 4 5  Linux 32-bit (GCC 3.2)
+ Sony Playstation Portable (GCC 3.4.2; in PUGIXML_NO_STL mode)
+ Microsoft Xbox (MSVC 7.1)
+  
+
 
-    if (!parser.document().traverse(mp)) 
-        // generate an error } 
-
+The documentation for pugixml  classes, functions and constants is available here .
 
  
-Parsing process 
-
-So, let's talk a bit about parsing process, and about the reason for providing XML data as a contiguous
-writeable block of memory. Parsing is done in-situ. This means, that the strings, representing the
-parts of DOM tree (node names, attribute names and values, CDATA content, etc.) are not separately
-allocated on heap, but instead are parts of the original data. This is the keypoint to parsing speed,
-because it helps achieve the minimal amount of memory allocations (more on that below) and minimal
-amount of copying data.
-
-In-situ parsing can be done in two ways, with zero-segmenting the string (that is, set the past-the-end
-character for the part of XML string to 0, see 
-this image  for further details), and storing pointer + size of the string instead of pointer to
-the beginning of ASCIIZ string.
-
-Originally, pugxml  had only the first way, but then authors added the second method, 'non-segmenting'
-or non-destructive parsing. The advantages of this method are: you no longer need non-constant storage;
-you can even read data from memory-mapped files directly. Well, there are disadvantages.
-For one thing, you can not do any of the transformations in-situ. The transformations that are required
-by XML standard are:
-
-End of line handling (replacing 0x0d 0x0a with 0x0a and any standalone 0x0d with 0x0a) (for the whole
-document) 
-White space normalization for attribute values (converting space-like characters to spaces (0x20),
-sometimes trimming leading/trailing spaces and converting sequences of spaces to a single space 
-Character reference expansion (< and alike, 
 and alike, ( and alike) 
-Entity reference expansion (&entityname;) 
- 
-
-None of these can be done in-situ. pugxml  did neither character nor entity reference expansion,
-and allocated new memory when normalizing white spaces when in non-destructive mode. I chose complete
-in-situ parsing (the good thing about it is that any transformation, except entity reference, can be
-done in-situ because it does not increase the amount of characters - even converting a character
-reference to UTF-8). There is no entity reference expansion because of this and because I do not want
-to parse DOCTYPE and, moreover, use DOCTYPE in following parsing (performing selective whitespace
-normalization in attributes and CDATA sections and so on).
-
-In order to be able to modify the tree (change attribute/node names & values) with in-situ parsing,
-one needs to implement two ways of storing data (both in-situ and not). The DOM tree is now mutable,
-but it will change in the future releases (without introducing speed/memory overhead, except on clean-
-up stage).
-
-The parsing process itself is more or less straightforward, when you see it - but the impression
-is fake, because the explicit jumps are made (i.e. we know, that if we come to a closing brace (>),
-we should expect CDATA after it (or a new tag), so let's just jump to the corresponding code), and,
-well, there can be bugs (see Bugs  section).
-
-And, to make things worse, memory allocation (which is done only for node and attribute structures)
-is done in pools. The pools are single-linked lists with predefined block size (32 kb by default), and
-well, it increases speed a lot (allocations are slow, and the memory gets fragmented when allocating
-a bunch of 16-byte (attribute) or 40-byte (node) structures)
+ 3  MSVC is Microsoft Visual C++ Compiler  4  ICC is Intel C++ Compiler  5  BCC is Borland C++ Compiler 
 
 parse_w3c  mode):
 correctly, let alone use them for parsing
 It accepts multiple attributes with the same name in one node
  It is charset-ignorant
- It accepts invalid names of tags
  It accepts invalid attribute values (those with < in them) and does not reject invalid entity
 references or character references (in fact, it does not do DOCTYPE parsing, so it does not perform
 entity reference expansion)
  It does not reject comments with -- inside
- It does not reject PI with the names of 'xml' and alike; in fact, it parses prolog as a PI, which
-is not conformant
- All characters from #x1 to #x20 are considered to be whitespaces
+ It does not reject PI with the names of 'xml' and alike
  And some other things that I forgot to mention
 
 
-In short, it accepts most malformed XML files and does not do anything that is related to DOCTYPE.
-This is because the main goal was developing fast, easy-to-use and error ignorant (so you can always
-get something even from a malformed document) parser, there are some good validating and conformant
+In short, it accepts some malformed XML files and does not do anything that is related to DOCTYPE.
+This is because the main goal was developing fast, easy-to-use and error ignorant (so you can get
+something even from a malformed document) parser, there are some good validating and conformant
 parsers already.
 
 Q:  I do not have/want STL support. How can I compile pugixml  without STL?
 A:  There is an undocumented define PUGIXML_NO_STL. If you uncomment the relevant line
 in pugixml  header file, it will compile without any STL classes. The reason it is undocumented
-are that it will make some documented functions not available (specifically, xml_parser() ctor and
-parse() function that operate on std::istream, xml_node::path function, utf16 and utf8 conversion
-functions). Otherwise, it will work fine.
+are that it will make some documented functions not available (specifically, xml_document::load, that
+operates on std::istream, xml_node::path function, saving functions (xml_node::print, xml_document::save),
+XPath-related functions and classes and as_utf16 and as_utf8 conversion functions). Otherwise, it will
+work fine.
 
 Q:  Do paths that are accepted by first_element_by_path  have to end with delimiter?
 A:  Either way will work, both /path/to/node/ and /path/to/node is fine.
@@ -1048,16 +577,10 @@ do not send executable files.
 upper ones will get there sooner).
 
 
-Support for altering the tree (both changing nodes'/attributes' names and values and adding/deleting
-attributes/nodes) and writing the tree to stream
  Support for UTF-16 files (parsing BOM to get file's type and converting UTF-16 file to UTF-8 buffer
 if necessary)
- Improved API (I'm going to look at SelectNode from MS XML and perhaps there will be some other
-changes)
- Externally provided entity reference table (or perhaps even taken from DOCTYPE?)
  More intelligent parsing of DOCTYPE (it does not always skip DOCTYPE for now)
  XML 1.1 changes (changed EOL handling, normalization issues, etc.)
- XPath support
  Name your own?
   
 
@@ -1079,6 +602,28 @@ changes)
  Optimizations of strconv_t
 
 
+21.02.2007 - v0.3
+ Refactored, reworked and improved version. Changes: 
+Interface: 
+Added XPath 
+ Added tree modification functions 
+ Added no STL compilation mode 
+ Added saving document to file 
+ Refactored parsing flags 
+ Removed xml_parser class in favor of xml_document 
+ Added transfer ownership parsing mode 
+ Modified the way xml_tree_walker works
+ Iterators are now non-constant
+  
+ Implementation:  
+Support of several compilers and platforms 
+ Refactored and sped up parsing core 
+ Improved standard compliancy 
+ Added XPath implementation 
+ Fixed several bugs 
+  
+   
+
 
 
 The pugixml  parser is distributed under the MIT license:
 
 
-Copyright (c) 2006 Arseny Kapoulkine
+Copyright (c) 2006-2007 Arseny Kapoulkine
 
 Permission is hereby granted, free of charge, to any person
 obtaining a copy of this software and associated documentation
@@ -1125,7 +670,7 @@ OTHER DEALINGS IN THE SOFTWARE.
 
 Revised 8 December, 2006
-© Copyright Arseny Kapoulkine  2006. All Rights Reserved. 
+Revised 21 February, 2007
+© Copyright Arseny Kapoulkine  2006-2007. All Rights Reserved.