16#ifndef PUGIXML_VERSION
17# define PUGIXML_VERSION 1150
23#ifndef HEADER_PUGIXML_HPP
24#define HEADER_PUGIXML_HPP
30#if !defined(PUGIXML_NO_XPATH) && !defined(PUGIXML_NO_EXCEPTIONS)
42#if !defined(PUGIXML_HAS_STRING_VIEW) && !defined(PUGIXML_NO_STL)
43# if __cplusplus >= 201703L
44# define PUGIXML_HAS_STRING_VIEW
45# elif defined(_MSVC_LANG) && _MSVC_LANG >= 201703L
46# define PUGIXML_HAS_STRING_VIEW
51#ifdef PUGIXML_HAS_STRING_VIEW
52# include <string_view>
56#ifndef PUGIXML_DEPRECATED
58# define PUGIXML_DEPRECATED __attribute__((deprecated))
59# elif defined(_MSC_VER) && _MSC_VER >= 1300
60# define PUGIXML_DEPRECATED __declspec(deprecated)
62# define PUGIXML_DEPRECATED
73# define PUGIXML_CLASS PUGIXML_API
77#ifndef PUGIXML_FUNCTION
78# define PUGIXML_FUNCTION PUGIXML_API
82#ifndef PUGIXML_HAS_LONG_LONG
83# if __cplusplus >= 201103
84# define PUGIXML_HAS_LONG_LONG
85# elif defined(_MSC_VER) && _MSC_VER >= 1400
86# define PUGIXML_HAS_LONG_LONG
91#ifndef PUGIXML_HAS_MOVE
92# if __cplusplus >= 201103
93# define PUGIXML_HAS_MOVE
94# elif defined(_MSC_VER) && _MSC_VER >= 1600
95# define PUGIXML_HAS_MOVE
100#ifndef PUGIXML_NOEXCEPT
101# if __cplusplus >= 201103
102# define PUGIXML_NOEXCEPT noexcept
103# elif defined(_MSC_VER) && _MSC_VER >= 1900
104# define PUGIXML_NOEXCEPT noexcept
106# define PUGIXML_NOEXCEPT throw()
111#ifdef PUGIXML_COMPACT
112# define PUGIXML_NOEXCEPT_IF_NOT_COMPACT
114# define PUGIXML_NOEXCEPT_IF_NOT_COMPACT PUGIXML_NOEXCEPT
118#ifndef PUGIXML_OVERRIDE
119# if __cplusplus >= 201103
120# define PUGIXML_OVERRIDE override
121# elif defined(_MSC_VER) && _MSC_VER >= 1700
122# define PUGIXML_OVERRIDE override
124# define PUGIXML_OVERRIDE
130# if __cplusplus >= 201103
131# define PUGIXML_NULL nullptr
132# elif defined(_MSC_VER) && _MSC_VER >= 1600
133# define PUGIXML_NULL nullptr
135# define PUGIXML_NULL 0
140#ifdef PUGIXML_WCHAR_MODE
141# define PUGIXML_TEXT(t) L ## t
142# define PUGIXML_CHAR wchar_t
144# define PUGIXML_TEXT(t) t
145# define PUGIXML_CHAR char
153#ifndef PUGIXML_NO_STL
158#ifdef PUGIXML_HAS_STRING_VIEW
160 typedef std::basic_string_view<PUGIXML_CHAR> string_view_t;
304 struct xml_attribute_struct;
305 struct xml_node_struct;
319 #ifndef PUGIXML_NO_XPATH
353 virtual void write(
const void* data,
size_t size) = 0;
369 #ifndef PUGIXML_NO_STL
405 operator unspecified_bool_type()
const;
430 unsigned int as_uint(
unsigned int def = 0)
const;
434 #ifdef PUGIXML_HAS_LONG_LONG
436 unsigned long long as_ullong(
unsigned long long def = 0)
const;
445 #ifdef PUGIXML_HAS_STRING_VIEW
446 bool set_name(string_view_t rhs);
450 #ifdef PUGIXML_HAS_STRING_VIEW
451 bool set_value(string_view_t rhs);
465 #ifdef PUGIXML_HAS_LONG_LONG
480 #ifdef PUGIXML_HAS_STRING_VIEW
484 #ifdef PUGIXML_HAS_LONG_LONG
516 typedef void (*unspecified_bool_type)(
xml_node***);
526 operator unspecified_bool_type()
const;
578 #ifdef PUGIXML_HAS_STRING_VIEW
579 xml_node child(string_view_t name)
const;
581 xml_node next_sibling(string_view_t name)
const;
582 xml_node previous_sibling(string_view_t name)
const;
587 #ifdef PUGIXML_HAS_STRING_VIEW
600 #ifdef PUGIXML_HAS_STRING_VIEW
601 bool set_name(string_view_t rhs);
605 #ifdef PUGIXML_HAS_STRING_VIEW
606 bool set_value(string_view_t rhs);
614 #ifdef PUGIXML_HAS_STRING_VIEW
638 #ifdef PUGIXML_HAS_STRING_VIEW
639 xml_node append_child(string_view_t name);
640 xml_node prepend_child(string_view_t name);
660 #ifdef PUGIXML_HAS_STRING_VIEW
661 bool remove_attribute(string_view_t name);
670 #ifdef PUGIXML_HAS_STRING_VIEW
671 bool remove_child(string_view_t name);
699 for (
xml_node node = first_child(); node; node = node.next_sibling())
715 if (pred(cur))
return cur;
734 #ifndef PUGIXML_NO_STL
745 #ifndef PUGIXML_NO_XPATH
763 #ifndef PUGIXML_NO_STL
765 void print(std::basic_ostream<char>& os,
const char_t* indent =
PUGIXML_TEXT(
"\t"),
unsigned int flags = format_default,
xml_encoding encoding = encoding_auto,
unsigned int depth = 0)
const;
766 void print(std::basic_ostream<wchar_t>& os,
const char_t* indent =
PUGIXML_TEXT(
"\t"),
unsigned int flags = format_default,
unsigned int depth = 0)
const;
812 typedef void (*unspecified_bool_type)(
xml_text***);
824 operator unspecified_bool_type()
const;
840 unsigned int as_uint(
unsigned int def = 0)
const;
844 #ifdef PUGIXML_HAS_LONG_LONG
846 unsigned long long as_ullong(
unsigned long long def = 0)
const;
855 #ifdef PUGIXML_HAS_STRING_VIEW
856 bool set(string_view_t rhs);
861 bool set(
unsigned int rhs);
863 bool set(
unsigned long rhs);
865 bool set(
double rhs,
int precision);
867 bool set(
float rhs,
int precision);
870 #ifdef PUGIXML_HAS_LONG_LONG
872 bool set(
unsigned long long rhs);
885 #ifdef PUGIXML_HAS_STRING_VIEW
886 xml_text& operator=(string_view_t rhs);
889 #ifdef PUGIXML_HAS_LONG_LONG
922 #ifndef PUGIXML_NO_STL
964 #ifndef PUGIXML_NO_STL
1000 #ifndef PUGIXML_NO_STL
1101 operator bool()
const;
1130 #ifdef PUGIXML_HAS_MOVE
1142 #ifndef PUGIXML_NO_STL
1172 #ifndef PUGIXML_NO_STL
1175 void save(std::basic_ostream<wchar_t>& stream,
const char_t* indent =
PUGIXML_TEXT(
"\t"),
unsigned int flags = format_default)
const;
1186#ifndef PUGIXML_NO_XPATH
1210 operator bool()
const;
1274 #ifdef PUGIXML_HAS_MOVE
1318 #ifdef PUGIXML_HAS_MOVE
1335 #ifndef PUGIXML_NO_STL
1362 operator unspecified_bool_type()
const;
1368 #ifndef PUGIXML_NO_EXCEPTIONS
1369 #if defined(_MSC_VER)
1372 #pragma warning(push)
1373 #pragma warning(disable: 4275)
1391 #if defined(_MSC_VER)
1392 #pragma warning(pop)
1421 operator unspecified_bool_type()
const;
1468 #ifdef PUGIXML_HAS_MOVE
1509#ifndef PUGIXML_NO_STL
1520 typedef void* (*allocation_function)(
size_t size);
1523 typedef void (*deallocation_function)(
void* ptr);
1533#if !defined(PUGIXML_NO_STL) && (defined(_MSC_VER) || defined(__ICC))
1543#if !defined(PUGIXML_NO_STL) && defined(__SUNPRO_CC)
1557#if defined(PUGIXML_HEADER_ONLY) && !defined(PUGIXML_SOURCE)
1558# define PUGIXML_SOURCE "pugixml.cpp"
1559# include PUGIXML_SOURCE
ptrdiff_t difference_type
xml_attribute * operator->() const
xml_attribute_iterator & operator++()
xml_attribute_iterator operator--(int)
xml_attribute_iterator & operator--()
xml_attribute_iterator operator++(int)
xml_attribute_iterator(xml_attribute_struct *ref, xml_node_struct *parent)
std::bidirectional_iterator_tag iterator_category
xml_attribute_iterator(const xml_attribute &attr, const xml_node &parent)
bool operator==(const xml_attribute_iterator &rhs) const
xml_attribute & reference
bool operator!=(const xml_attribute_iterator &rhs) const
xml_attribute & operator*() const
bool set_value(float rhs, int precision)
bool operator>(const xml_attribute &r) const
xml_attribute & operator=(unsigned long rhs)
bool set_value(const char_t *rhs, size_t size)
xml_attribute & operator=(long rhs)
bool set_value(unsigned long long rhs)
unsigned long long as_ullong(unsigned long long def=0) const
bool operator<=(const xml_attribute &r) const
xml_attribute & operator=(unsigned int rhs)
xml_attribute & operator=(const char_t *rhs)
xml_attribute next_attribute() const
xml_attribute & operator=(long long rhs)
bool set_value(double rhs, int precision)
size_t hash_value() const
xml_attribute_struct * internal_object() const
xml_attribute(xml_attribute_struct *attr)
bool as_bool(bool def=false) const
const char_t * value() const
bool set_name(const char_t *rhs, size_t size)
float as_float(float def=0) const
xml_attribute & operator=(unsigned long long rhs)
const char_t * name() const
bool set_value(const char_t *rhs)
bool set_value(double rhs)
bool set_value(long long rhs)
bool operator>=(const xml_attribute &r) const
bool operator==(const xml_attribute &r) const
const char_t * as_string(const char_t *def=PUGIXML_TEXT("")) const
double as_double(double def=0) const
bool operator<(const xml_attribute &r) const
unsigned int as_uint(unsigned int def=0) const
xml_attribute_struct * _attr
xml_attribute previous_attribute() const
bool set_value(unsigned int rhs)
bool operator!=(const xml_attribute &r) const
long long as_llong(long long def=0) const
xml_attribute & operator=(float rhs)
xml_attribute & operator=(double rhs)
bool set_name(const char_t *rhs)
bool set_value(float rhs)
bool set_value(unsigned long rhs)
xml_attribute & operator=(bool rhs)
xml_attribute & operator=(int rhs)
int as_int(int def=0) const
xml_parse_result load_buffer_inplace_own(void *contents, size_t size, unsigned int options=parse_default, xml_encoding encoding=encoding_auto)
xml_parse_result load(std::basic_istream< wchar_t > &stream, unsigned int options=parse_default)
xml_parse_result load_file(const char *path, unsigned int options=parse_default, xml_encoding encoding=encoding_auto)
bool save_file(const wchar_t *path, const char_t *indent=PUGIXML_TEXT("\t"), unsigned int flags=format_default, xml_encoding encoding=encoding_auto) const
xml_document(const xml_document &)
void save(xml_writer &writer, const char_t *indent=PUGIXML_TEXT("\t"), unsigned int flags=format_default, xml_encoding encoding=encoding_auto) const
xml_parse_result load_string(const char_t *contents, unsigned int options=parse_default)
xml_parse_result load_file(const wchar_t *path, unsigned int options=parse_default, xml_encoding encoding=encoding_auto)
xml_parse_result load(std::basic_istream< char > &stream, unsigned int options=parse_default, xml_encoding encoding=encoding_auto)
void save(std::basic_ostream< wchar_t > &stream, const char_t *indent=PUGIXML_TEXT("\t"), unsigned int flags=format_default) const
xml_node document_element() const
xml_document & operator=(const xml_document &)
void reset(const xml_document &proto)
xml_parse_result load_buffer_inplace(void *contents, size_t size, unsigned int options=parse_default, xml_encoding encoding=encoding_auto)
PUGIXML_DEPRECATED xml_parse_result load(const char_t *contents, unsigned int options=parse_default)
bool save_file(const char *path, const char_t *indent=PUGIXML_TEXT("\t"), unsigned int flags=format_default, xml_encoding encoding=encoding_auto) const
void save(std::basic_ostream< char > &stream, const char_t *indent=PUGIXML_TEXT("\t"), unsigned int flags=format_default, xml_encoding encoding=encoding_auto) const
void _move(xml_document &rhs) PUGIXML_NOEXCEPT_IF_NOT_COMPACT
xml_parse_result load_buffer(const void *contents, size_t size, unsigned int options=parse_default, xml_encoding encoding=encoding_auto)
xml_named_node_iterator & operator++()
xml_named_node_iterator(xml_node_struct *ref, xml_node_struct *parent, const char_t *name)
ptrdiff_t difference_type
bool operator!=(const xml_named_node_iterator &rhs) const
xml_named_node_iterator(const xml_node &node, const char_t *name)
xml_named_node_iterator()
xml_named_node_iterator & operator--()
xml_named_node_iterator operator--(int)
xml_node & operator*() const
xml_named_node_iterator operator++(int)
std::bidirectional_iterator_tag iterator_category
xml_node * operator->() const
bool operator==(const xml_named_node_iterator &rhs) const
bool operator==(const xml_node_iterator &rhs) const
xml_node_iterator & operator++()
xml_node_iterator(xml_node_struct *ref, xml_node_struct *parent)
xml_node_iterator(const xml_node &node)
xml_node_iterator operator--(int)
bool operator!=(const xml_node_iterator &rhs) const
xml_node_iterator & operator--()
std::bidirectional_iterator_tag iterator_category
xml_node_iterator operator++(int)
ptrdiff_t difference_type
xml_node * operator->() const
xml_node & operator*() const
xml_node insert_copy_after(const xml_node &proto, const xml_node &node)
bool set_value(const char_t *rhs, size_t size)
bool remove_child(const xml_node &n)
xml_node insert_move_before(const xml_node &moved, const xml_node &node)
PUGIXML_DEPRECATED xpath_node select_single_node(const xpath_query &query) const
xml_node insert_child_before(const char_t *name, const xml_node &node)
xml_node prepend_copy(const xml_node &proto)
const char_t * value() const
bool operator>=(const xml_node &r) const
bool operator<=(const xml_node &r) const
xml_node insert_move_after(const xml_node &moved, const xml_node &node)
PUGIXML_DEPRECATED xpath_node select_single_node(const char_t *query, xpath_variable_set *variables=PUGIXML_NULL) const
xml_node find_child_by_attribute(const char_t *attr_name, const char_t *attr_value) const
xpath_node_set select_nodes(const char_t *query, xpath_variable_set *variables=PUGIXML_NULL) const
xml_node prepend_move(const xml_node &moved)
xml_node next_sibling(const char_t *name) const
xml_attribute first_attribute() const
xml_attribute insert_copy_after(const xml_attribute &proto, const xml_attribute &attr)
bool operator!=(const xml_node &r) const
xml_attribute insert_attribute_after(const char_t *name, const xml_attribute &attr)
bool traverse(xml_tree_walker &walker)
xml_attribute find_attribute(Predicate pred) const
xml_node prepend_child(xml_node_type type=node_element)
xml_attribute append_attribute(const char_t *name)
xpath_node select_node(const xpath_query &query) const
xml_node append_child(xml_node_type type=node_element)
xml_node first_element_by_path(const char_t *path, char_t delimiter='/') const
xml_node_struct * internal_object() const
xml_node append_copy(const xml_node &proto)
xml_object_range< xml_node_iterator > children() const
const char_t * name() const
xml_attribute insert_attribute_before(const char_t *name, const xml_attribute &attr)
xml_node(xml_node_struct *p)
xml_node find_child_by_attribute(const char_t *name, const char_t *attr_name, const char_t *attr_value) const
xml_object_range< xml_attribute_iterator > attributes() const
xml_node previous_sibling(const char_t *name) const
bool set_name(const char_t *rhs, size_t size)
bool set_name(const char_t *rhs)
xml_attribute prepend_attribute(const char_t *name)
ptrdiff_t offset_debug() const
xml_node first_child() const
xml_node append_child(const char_t *name)
xml_node previous_sibling() const
xml_attribute prepend_copy(const xml_attribute &proto)
xml_node append_move(const xml_node &moved)
xml_object_range< xml_named_node_iterator > children(const char_t *name) const
xml_node insert_copy_before(const xml_node &proto, const xml_node &node)
bool remove_child(const char_t *name)
xml_attribute attribute(const char_t *name) const
xml_node find_node(Predicate pred) const
void print(std::basic_ostream< wchar_t > &os, const char_t *indent=PUGIXML_TEXT("\t"), unsigned int flags=format_default, unsigned int depth=0) const
bool operator<(const xml_node &r) const
void print(std::basic_ostream< char > &os, const char_t *indent=PUGIXML_TEXT("\t"), unsigned int flags=format_default, xml_encoding encoding=encoding_auto, unsigned int depth=0) const
attribute_iterator attributes_begin() const
xml_attribute_iterator attribute_iterator
bool operator==(const xml_node &r) const
xml_attribute last_attribute() const
xml_attribute insert_copy_before(const xml_attribute &proto, const xml_attribute &attr)
bool remove_attribute(const char_t *name)
xml_parse_result append_buffer(const void *contents, size_t size, unsigned int options=parse_default, xml_encoding encoding=encoding_auto)
xml_node insert_child_before(xml_node_type type, const xml_node &node)
xml_node last_child() const
void print(xml_writer &writer, const char_t *indent=PUGIXML_TEXT("\t"), unsigned int flags=format_default, xml_encoding encoding=encoding_auto, unsigned int depth=0) const
const char_t * child_value() const
xml_attribute append_copy(const xml_attribute &proto)
size_t hash_value() const
xml_node prepend_child(const char_t *name)
xml_node_type type() const
xml_node find_child(Predicate pred) const
xml_attribute attribute(const char_t *name, xml_attribute &hint) const
xml_node insert_child_after(const char_t *name, const xml_node &node)
bool remove_attribute(const xml_attribute &a)
const char_t * child_value(const char_t *name) const
string_t path(char_t delimiter='/') const
xpath_node select_node(const char_t *query, xpath_variable_set *variables=PUGIXML_NULL) const
xpath_node_set select_nodes(const xpath_query &query) const
bool operator>(const xml_node &r) const
xml_node_iterator iterator
xml_node next_sibling() const
attribute_iterator attributes_end() const
xml_node child(const char_t *name) const
xml_node insert_child_after(xml_node_type type, const xml_node &node)
bool set_value(const char_t *rhs)
xml_object_range(It b, It e)
const char_t * as_string(const char_t *def=PUGIXML_TEXT("")) const
xml_text(xml_node_struct *root)
double as_double(double def=0) const
float as_float(float def=0) const
int as_int(int def=0) const
xml_node_struct * _data() const
bool set(double rhs, int precision)
xml_text & operator=(double rhs)
xml_text & operator=(int rhs)
bool set(unsigned int rhs)
xml_text & operator=(long long rhs)
xml_text & operator=(unsigned long long rhs)
xml_text & operator=(long rhs)
bool set(const char_t *rhs, size_t size)
xml_text & operator=(bool rhs)
bool as_bool(bool def=false) const
bool set(const char_t *rhs)
long long as_llong(long long def=0) const
xml_node_struct * _data_new()
unsigned long long as_ullong(unsigned long long def=0) const
bool set(float rhs, int precision)
bool set(unsigned long long rhs)
bool set(unsigned long rhs)
xml_text & operator=(float rhs)
unsigned int as_uint(unsigned int def=0) const
const char_t * get() const
xml_text & operator=(const char_t *rhs)
xml_text & operator=(unsigned long rhs)
xml_text & operator=(unsigned int rhs)
virtual bool for_each(xml_node &node)=0
virtual ~xml_tree_walker()
virtual bool end(xml_node &node)
virtual bool begin(xml_node &node)
virtual void write(const void *data, size_t size) PUGIXML_OVERRIDE
xml_writer_file(void *file)
std::basic_ostream< wchar_t > * wide_stream
xml_writer_stream(std::basic_ostream< wchar_t > &stream)
virtual void write(const void *data, size_t size) PUGIXML_OVERRIDE
std::basic_ostream< char > * narrow_stream
xml_writer_stream(std::basic_ostream< char > &stream)
virtual void write(const void *data, size_t size)=0
const_iterator begin() const
xpath_node_set(const_iterator begin, const_iterator end, type_t type=type_unsorted)
void sort(bool reverse=false)
xpath_node_set(const xpath_node_set &ns)
const xpath_node * const_iterator
const_iterator end() const
const xpath_node & operator[](size_t index) const
void _assign(const_iterator begin, const_iterator end, type_t type)
const xpath_node * iterator
xpath_node_set & operator=(const xpath_node_set &ns)
void _move(xpath_node_set &rhs) PUGIXML_NOEXCEPT
xml_attribute attribute() const
bool operator!=(const xpath_node &n) const
xpath_node(const xml_attribute &attribute, const xml_node &parent)
bool operator==(const xpath_node &n) const
xpath_node(const xml_node &node)
xpath_node_set evaluate_node_set(const xpath_node &n) const
string_t evaluate_string(const xpath_node &n) const
size_t evaluate_string(char_t *buffer, size_t capacity, const xpath_node &n) const
xpath_parse_result _result
xpath_node evaluate_node(const xpath_node &n) const
xpath_query & operator=(const xpath_query &)
double evaluate_number(const xpath_node &n) const
const xpath_parse_result & result() const
xpath_query(const xpath_query &)
xpath_value_type return_type() const
xpath_query(const char_t *query, xpath_variable_set *variables=PUGIXML_NULL)
bool evaluate_boolean(const xpath_node &n) const
void _swap(xpath_variable_set &rhs)
const xpath_variable * get(const char_t *name) const
xpath_variable * _find(const char_t *name) const
xpath_variable_set & operator=(const xpath_variable_set &rhs)
bool set(const char_t *name, const xpath_node_set &value)
bool set(const char_t *name, bool value)
bool set(const char_t *name, const char_t *value)
bool set(const char_t *name, double value)
xpath_variable * get(const char_t *name)
static bool _clone(xpath_variable *var, xpath_variable **out_result)
void _assign(const xpath_variable_set &rhs)
static void _destroy(xpath_variable *var)
xpath_variable_set(const xpath_variable_set &rhs)
xpath_variable * add(const char_t *name, xpath_value_type type)
bool set(const char_t *value)
xpath_variable(const xpath_variable &)
xpath_value_type type() const
xpath_variable(xpath_value_type type)
double get_number() const
const xpath_node_set & get_node_set() const
const char_t * get_string() const
const char_t * name() const
xpath_variable & operator=(const xpath_variable &)
bool set(const xpath_node_set &value)
const unsigned int format_no_empty_element_tags
deallocation_function PUGIXML_FUNCTION get_memory_deallocation_function()
std::basic_string< wchar_t > PUGIXML_FUNCTION as_wide(const char *str)
allocation_function PUGIXML_FUNCTION get_memory_allocation_function()
const unsigned int format_no_declaration
const unsigned int parse_trim_pcdata
const unsigned int parse_wconv_attribute
const unsigned int format_skip_control_chars
const unsigned int format_raw
const unsigned int format_default
void(* deallocation_function)(void *ptr)
const int default_double_precision
const unsigned int parse_cdata
void *(* allocation_function)(size_t size)
const unsigned int parse_merge_pcdata
const unsigned int parse_fragment
const unsigned int parse_full
const unsigned int parse_embed_pcdata
const unsigned int parse_wnorm_attribute
const unsigned int format_indent_attributes
const unsigned int parse_pi
@ status_append_invalid_root
@ status_end_element_mismatch
@ status_bad_start_element
@ status_unrecognized_tag
@ status_no_document_element
std::basic_string< char > PUGIXML_FUNCTION as_utf8(const wchar_t *str)
const unsigned int format_save_file_text
const unsigned int parse_escapes
const unsigned int format_write_bom
void PUGIXML_FUNCTION set_memory_management_functions(allocation_function allocate, deallocation_function deallocate)
const unsigned int format_attribute_single_quote
const unsigned int format_indent
const unsigned int parse_eol
const unsigned int parse_default
const unsigned int parse_declaration
const unsigned int parse_comments
const unsigned int parse_ws_pcdata
const unsigned int parse_minimal
const unsigned int parse_ws_pcdata_single
const unsigned int format_no_escapes
const int default_float_precision
std::basic_string< PUGIXML_CHAR > string_t
const unsigned int parse_doctype
#define PUGIXML_DEPRECATED
#define PUGIXML_NOEXCEPT_IF_NOT_COMPACT
const char * description() const
const char * description() const