このページの内容

10. API リファレンス

これは、pugixml のすべてのマクロ、型、列挙型、クラス、関数をまとめたリファレンスです。各シンボルは、マニュアルの該当する節へのリンクになっています。

10.2. 型

typedef configuration-defined-type char_t;
typedef configuration-defined-type string_t;
typedef configuration-defined-type string_view_t;
typedef void* (*allocation_function)(size_t size);
typedef void (*deallocation_function)(void* ptr);

10.4. 定数

// Formatting options bit flags:
const unsigned int format_attribute_single_quote
const unsigned int format_default
const unsigned int format_indent
const unsigned int format_indent_attributes
const unsigned int format_no_declaration
const unsigned int format_no_empty_element_tags
const unsigned int format_no_escapes
const unsigned int format_raw
const unsigned int format_save_file_text
const unsigned int format_skip_control_chars
const unsigned int format_write_bom

// Parsing options bit flags:
const unsigned int parse_cdata
const unsigned int parse_comments
const unsigned int parse_declaration
const unsigned int parse_default
const unsigned int parse_doctype
const unsigned int parse_eol
const unsigned int parse_escapes
const unsigned int parse_fragment
const unsigned int parse_full
const unsigned int parse_minimal
const unsigned int parse_pi
const unsigned int parse_trim_pcdata
const unsigned int parse_ws_pcdata
const unsigned int parse_ws_pcdata_single
const unsigned int parse_embed_pcdata
const unsigned int parse_merge_pcdata
const unsigned int parse_wconv_attribute
const unsigned int parse_wnorm_attribute

10.5. クラス

class xml_attribute
    xml_attribute();

    bool empty() const;
    operator unspecified_bool_type() 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;
    bool operator>=(const xml_attribute& r) const;

    size_t hash_value() const;

    xml_attribute next_attribute() const;
    xml_attribute previous_attribute() const;

    const char_t* name() const;
    const char_t* value() const;

    const char_t* as_string(const char_t* def = "") const;
    int as_int(int def = 0) const;
    unsigned int as_uint(unsigned int def = 0) const;
    double as_double(double def = 0) const;
    float as_float(float def = 0) const;
    bool as_bool(bool def = false) const;
    long long as_llong(long long def = 0) const;
    unsigned long long as_ullong(unsigned long long def = 0) const;

    bool set_name(const char_t* rhs);
    bool set_name(const char_t* rhs, size_t size);
    bool set_name(string_view_t rhs);
    bool set_value(const char_t* rhs);
    bool set_value(const char_t* rhs, size_t size);
    bool set_value(string_view_t rhs);
    bool set_value(int rhs);
    bool set_value(unsigned int rhs);
    bool set_value(long rhs);
    bool set_value(unsigned long rhs);
    bool set_value(double rhs);
    bool set_value(double rhs, int precision);
    bool set_value(float rhs);
    bool set_value(float rhs, int precision);
    bool set_value(bool rhs);
    bool set_value(long long rhs);
    bool set_value(unsigned long long rhs);

    xml_attribute& operator=(const char_t* rhs);
    xml_attribute& operator=(string_view_t rhs);
    xml_attribute& operator=(int rhs);
    xml_attribute& operator=(unsigned int rhs);
    xml_attribute& operator=(long rhs);
    xml_attribute& operator=(unsigned long rhs);
    xml_attribute& operator=(double rhs);
    xml_attribute& operator=(float rhs);
    xml_attribute& operator=(bool rhs);
    xml_attribute& operator=(long long rhs);
    xml_attribute& operator=(unsigned long long rhs);

class xml_node
    xml_node();

    bool empty() const;
    operator unspecified_bool_type() 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;
    bool operator>=(const xml_node& r) const;

    size_t hash_value() const;

    xml_node_type type() const;

    const char_t* name() const;
    const char_t* value() const;

    xml_node parent() const;
    xml_node first_child() const;
    xml_node last_child() const;
    xml_node next_sibling() const;
    xml_node previous_sibling() const;

    xml_attribute first_attribute() const;
    xml_attribute last_attribute() const;

    implementation-defined-type children() const;
    implementation-defined-type children(const char_t* name) const;
    implementation-defined-type attributes() const;

    xml_node child(const char_t* name) const;
    xml_node child(string_view_t name) const;
    xml_attribute attribute(const char_t* name) const;
    xml_attribute attribute(string_view_t name) const;
    xml_node next_sibling(const char_t* name) const;
    xml_node next_sibling(string_view_t name) const;
    xml_node previous_sibling(const char_t* name) const;
    xml_node previous_sibling(string_view_t name) const;

    xml_attribute attribute(const char_t* name, xml_attribute& hint) const;
    xml_attribute attribute(string_view_t name, xml_attribute& hint) const;

    xml_node find_child_by_attribute(const char_t* name, const char_t* attr_name, const char_t* attr_value) const;
    xml_node find_child_by_attribute(const char_t* attr_name, const char_t* attr_value) const;

    const char_t* child_value() const;
    const char_t* child_value(const char_t* name) const;
    xml_text text() const;

    typedef xml_node_iterator iterator;
    iterator begin() const;
    iterator end() const;

    typedef xml_attribute_iterator attribute_iterator;
    attribute_iterator attributes_begin() const;
    attribute_iterator attributes_end() const;

    bool traverse(xml_tree_walker& walker);

    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_node(Predicate pred) const;

    string_t path(char_t delimiter = '/') const;
    xml_node first_element_by_path(const char_t* path, char_t delimiter = '/') const;
    xml_node root() const;
    ptrdiff_t offset_debug() const;

    bool set_name(const char_t* rhs);
    bool set_name(const char_t* rhs, size_t size);
    bool set_name(string_view_t rhs);
    bool set_value(const char_t* rhs);
    bool set_value(const char_t* rhs, size_t size);
    bool set_value(string_view_t rhs);

    xml_attribute append_attribute(const char_t* name);
    xml_attribute append_attribute(string_view_t name);
    xml_attribute prepend_attribute(const char_t* name);
    xml_attribute prepend_attribute(string_view_t name);
    xml_attribute insert_attribute_after(const char_t* name, const xml_attribute& attr);
    xml_attribute insert_attribute_after(string_view_t name, const xml_attribute& attr);
    xml_attribute insert_attribute_before(const char_t* name, const xml_attribute& attr);
    xml_attribute insert_attribute_before(string_view_t name, const xml_attribute& attr);

    xml_node append_child(xml_node_type type = node_element);
    xml_node prepend_child(xml_node_type type = node_element);
    xml_node insert_child_after(xml_node_type type, const xml_node& node);
    xml_node insert_child_before(xml_node_type type, const xml_node& node);

    xml_node append_child(const char_t* name);
    xml_node append_child(string_view_t name);
    xml_node prepend_child(const char_t* name);
    xml_node prepend_child(string_view_t name);
    xml_node insert_child_after(const char_t* name, const xml_node& node);
    xml_node insert_child_after(string_view_t name, const xml_node& node);
    xml_node insert_child_before(const char_t* name, const xml_node& node);
    xml_node insert_child_before(string_view_t name, const xml_node& node);

    xml_attribute ensure_attribute(const char_t* name);
    xml_attribute ensure_attribute(string_view_t name);
    xml_node ensure_child(const char_t* name);
    xml_node ensure_child(string_view_t name);

    xml_attribute append_copy(const xml_attribute& proto);
    xml_attribute prepend_copy(const xml_attribute& proto);
    xml_attribute insert_copy_after(const xml_attribute& proto, const xml_attribute& attr);
    xml_attribute insert_copy_before(const xml_attribute& proto, const xml_attribute& attr);

    xml_node append_copy(const xml_node& proto);
    xml_node prepend_copy(const xml_node& proto);
    xml_node insert_copy_after(const xml_node& proto, const xml_node& node);
    xml_node insert_copy_before(const xml_node& proto, const xml_node& node);

    xml_node append_move(const xml_node& moved);
    xml_node prepend_move(const xml_node& moved);
    xml_node insert_move_after(const xml_node& moved, const xml_node& node);
    xml_node insert_move_before(const xml_node& moved, const xml_node& node);

    bool remove_attribute(const xml_attribute& a);
    bool remove_attribute(const char_t* name);
    bool remove_attribute(string_view_t name);
    bool remove_attributes();
    bool remove_child(const xml_node& n);
    bool remove_child(const char_t* name);
    bool remove_child(string_view_t name);
    bool remove_children();

    xml_parse_result append_buffer(const void* contents, size_t size, unsigned int options = parse_default, xml_encoding encoding = encoding_auto);

    void print(xml_writer& writer, const char_t* indent = "\t", unsigned int flags = format_default, xml_encoding encoding = encoding_auto, unsigned int depth = 0) const;
    void print(std::ostream& os, const char_t* indent = "\t", unsigned int flags = format_default, xml_encoding encoding = encoding_auto, unsigned int depth = 0) const;
    void print(std::wostream& os, const char_t* indent = "\t", unsigned int flags = format_default, unsigned int depth = 0) const;

    xpath_node select_node(const char_t* query, xpath_variable_set* variables = 0) const;
    xpath_node select_node(const xpath_query& query) const;
    xpath_node_set select_nodes(const char_t* query, xpath_variable_set* variables = 0) const;
    xpath_node_set select_nodes(const xpath_query& query) const;

class xml_document
    xml_document();
    ~xml_document();

    void reset();
    void reset(const xml_document& proto);

    xml_parse_result load(std::istream& stream, unsigned int options = parse_default, xml_encoding encoding = encoding_auto);
    xml_parse_result load(std::wistream& stream, unsigned int options = parse_default);

    xml_parse_result load_string(const char_t* contents, unsigned int options = parse_default);

    xml_parse_result load_file(const char* path, unsigned int options = parse_default, xml_encoding encoding = encoding_auto);
    xml_parse_result load_file(const wchar_t* path, unsigned int options = parse_default, xml_encoding encoding = encoding_auto);

    xml_parse_result load_buffer(const void* contents, size_t size, unsigned int options = parse_default, xml_encoding encoding = encoding_auto);
    xml_parse_result load_buffer_inplace(void* contents, size_t size, unsigned int options = parse_default, xml_encoding encoding = encoding_auto);
    xml_parse_result load_buffer_inplace_own(void* contents, size_t size, unsigned int options = parse_default, xml_encoding encoding = encoding_auto);

    bool save_file(const char* path, const char_t* indent = "\t", unsigned int flags = format_default, xml_encoding encoding = encoding_auto) const;
    bool save_file(const wchar_t* path, const char_t* indent = "\t", unsigned int flags = format_default, xml_encoding encoding = encoding_auto) const;

    void save(std::ostream& stream, const char_t* indent = "\t", unsigned int flags = format_default, xml_encoding encoding = encoding_auto) const;
    void save(std::wostream& stream, const char_t* indent = "\t", unsigned int flags = format_default) const;

    void save(xml_writer& writer, const char_t* indent = "\t", unsigned int flags = format_default, xml_encoding encoding = encoding_auto) const;

    xml_node document_element() const;

struct xml_parse_result
    xml_parse_status status;
    ptrdiff_t offset;
    xml_encoding encoding;

    operator bool() const;
    const char* description() const;

class xml_node_iterator
class xml_attribute_iterator

class xml_tree_walker
    virtual bool begin(xml_node& node);
    virtual bool for_each(xml_node& node) = 0;
    virtual bool end(xml_node& node);

    int depth() const;

class xml_text
    bool empty() const;
    operator unspecified_bool_type() const;

    const char_t* get() const;

    const char_t* as_string(const char_t* def = "") const;
    int as_int(int def = 0) const;
    unsigned int as_uint(unsigned int def = 0) const;
    double as_double(double def = 0) const;
    float as_float(float def = 0) const;
    bool as_bool(bool def = false) const;
    long long as_llong(long long def = 0) const;
    unsigned long long as_ullong(unsigned long long def = 0) const;

    bool set(const char_t* rhs);
    bool set(const char_t* rhs, size_t size);
    bool set(string_view_t rhs);

    bool set(int rhs);
    bool set(unsigned int rhs);
    bool set(long rhs);
    bool set(unsigned long rhs);
    bool set(double rhs);
    bool set(double rhs, int precision);
    bool set(float rhs);
    bool set(float rhs, int precision);
    bool set(bool rhs);
    bool set(long long rhs);
    bool set(unsigned long long rhs);

    xml_text& operator=(const char_t* rhs);
    xml_text& operator=(string_view_t rhs);
    xml_text& operator=(int rhs);
    xml_text& operator=(unsigned int rhs);
    xml_text& operator=(long rhs);
    xml_text& operator=(unsigned long rhs);
    xml_text& operator=(double rhs);
    xml_text& operator=(float rhs);
    xml_text& operator=(bool rhs);
    xml_text& operator=(long long rhs);
    xml_text& operator=(unsigned long long rhs);

    xml_node data() const;

class xml_writer
    virtual void write(const void* data, size_t size) = 0;

class xml_writer_file: public xml_writer
    xml_writer_file(void* file);

class xml_writer_stream: public xml_writer
    xml_writer_stream(std::ostream& stream);
    xml_writer_stream(std::wostream& stream);

struct xpath_parse_result
    const char* error;
    ptrdiff_t offset;

    operator bool() const;
    const char* description() const;

class xpath_query
    explicit xpath_query(const char_t* query, xpath_variable_set* variables = 0);

    bool evaluate_boolean(const xpath_node& n) const;
    double evaluate_number(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_node_set evaluate_node_set(const xpath_node& n) const;
    xpath_node evaluate_node(const xpath_node& n) const;

    xpath_value_type return_type() const;

    const xpath_parse_result& result() const;
    operator unspecified_bool_type() const;

class xpath_exception: public std::exception
    virtual const char* what() const noexcept;

    const xpath_parse_result& result() const;

class xpath_node
    xpath_node();
    xpath_node(const xml_node& node);
    xpath_node(const xml_attribute& attribute, const xml_node& parent);

    xml_node node() const;
    xml_attribute attribute() const;
    xml_node parent() const;

    operator unspecified_bool_type() const;
    bool operator==(const xpath_node& n) const;
    bool operator!=(const xpath_node& n) const;

class xpath_node_set
    xpath_node_set();
    xpath_node_set(const_iterator begin, const_iterator end, type_t type = type_unsorted);

    typedef const xpath_node* const_iterator;
    const_iterator begin() const;
    const_iterator end() const;

    const xpath_node& operator[](size_t index) const;
    size_t size() const;
    bool empty() const;

    xpath_node first() const;

    enum type_t {type_unsorted, type_sorted, type_sorted_reverse};
    type_t type() const;
    void sort(bool reverse = false);

class xpath_variable
    const char_t* name() const;
    xpath_value_type type() const;

    bool get_boolean() const;
    double get_number() const;
    const char_t* get_string() const;
    const xpath_node_set& get_node_set() const;

    bool set(bool value);
    bool set(double value);
    bool set(const char_t* value);
    bool set(const xpath_node_set& value);

class xpath_variable_set
    xpath_variable* add(const char_t* name, xpath_value_type type);

    bool set(const char_t* name, bool value);
    bool set(const char_t* name, double value);
    bool set(const char_t* name, const char_t* value);
    bool set(const char_t* name, const xpath_node_set& value);

    xpath_variable* get(const char_t* name);
    const xpath_variable* get(const char_t* name) const;

10.6. 関数

std::string as_utf8(const wchar_t* str);
std::string as_utf8(const std::wstring& str);
std::wstring as_wide(const char* str);
std::wstring as_wide(const std::string& str);
void set_memory_management_functions(allocation_function allocate, deallocation_function deallocate);
allocation_function get_memory_allocation_function();
deallocation_function get_memory_deallocation_function();