1#ifndef OPENXLSX_XLXMLPARSER_HPP
2#define OPENXLSX_XLXMLPARSER_HPP
13 constexpr const int XLMaxNamespacedNameLen = 100;
18#define ENABLE_XML_NAMESPACES 1
20#ifdef ENABLE_XML_NAMESPACES
26# define NAMESPACED_NAME(name_, force_ns_) namespaced_name_proxy(name_, force_ns_).c_str()
29# define NAMESPACED_NAME(name_, force_ns_) name_
60 class OpenXLSX_xml_node;
61 class OpenXLSX_xml_document;
76 const pugi::char_t* m_ptr;
78 NameProxy(
const pugi::char_t* ptr) : m_str(), m_ptr(ptr) {}
80 const pugi::char_t*
c_str()
const {
return m_ptr; }
99 const char*
name = xml_node::name();
101 while (
name[pos] and
name[pos] !=
':') ++pos;
102 if (
name[pos] ==
':') name_begin = pos + 1;
135 const pugi::char_t*
name()
const {
return &xml_node::name()[name_begin]; }
141 const pugi::char_t*
raw_name()
const {
return xml_node::name(); }
147 template<
typename Predicate>
149 {
return pugi::xml_node::find_child(pred); }
155 const pugi::char_t*
child_value()
const {
return xml_node::child_value(); }
158 bool set_name(
const pugi::char_t* rhs,
size_t size,
bool force_ns =
false)
159 {
return xml_node::set_name(
NAMESPACED_NAME(rhs, force_ns), size + name_begin); }
169 {
return xml_node::insert_child_after(
NAMESPACED_NAME(name_, force_ns), node); }
171 {
return xml_node::insert_child_before(
NAMESPACED_NAME(name_, force_ns), node); }
173 bool remove_child(
const xml_node& n) {
return xml_node::remove_child(n); }
175 {
return xml_node::find_child_by_attribute(
NAMESPACED_NAME(name_,
false), attr_name, attr_value); }
177 {
return xml_node::find_child_by_attribute(attr_name, attr_value); }
#define NAMESPACED_NAME(name_, force_ns_)
Definition XLXmlParser.hpp:26
Definition XLXmlParser.hpp:74
NameProxy(const pugi::char_t *ptr)
Definition XLXmlParser.hpp:78
NameProxy(std::string str)
Definition XLXmlParser.hpp:79
const pugi::char_t * c_str() const
Definition XLXmlParser.hpp:80
Definition XLXmlParser.hpp:241
XMLNode document_element() const
for all functions: invoke the base class function, but with a return type of OpenXLSX_xml_node
Definition XLXmlParser.hpp:260
OpenXLSX_xml_document(base b)
Inherit all constructors with parameters from pugi::xml_document.
Definition XLXmlParser.hpp:252
OpenXLSX_xml_document()
Default constructor. Constructs a null object.
Definition XLXmlParser.hpp:246
Definition XLXmlParser.hpp:84
XMLNode append_child(const pugi::char_t *name_, bool force_ns=false)
Definition XLXmlParser.hpp:162
XMLNode last_child_of_type(pugi::xml_node_type type_=pugi::node_element) const
get last node child that matches type
Definition XLXmlParser.cpp:63
const pugi::char_t * child_value() const
Definition XLXmlParser.hpp:155
XMLNode next_sibling(const pugi::char_t *name_) const
Definition XLXmlParser.hpp:151
XMLNode child(const pugi::char_t *name_) const
Definition XLXmlParser.hpp:150
XMLNode prepend_child(pugi::xml_node_type type_)
Definition XLXmlParser.hpp:161
const pugi::char_t * name_without_namespace(const pugi::char_t *name_) const
Strip any namespace from name_.
Definition XLXmlParser.cpp:33
bool set_name(const pugi::char_t *rhs, bool force_ns=false)
Definition XLXmlParser.hpp:157
OpenXLSX_xml_node(base b)
Inherit all constructors with parameters from pugi::xml_node.
Definition XLXmlParser.hpp:95
XMLNode find_child(Predicate pred) const
Definition XLXmlParser.hpp:148
XMLNode previous_sibling() const
Definition XLXmlParser.hpp:154
XMLNode previous_sibling_of_type(pugi::xml_node_type type_=pugi::node_element) const
get previous node sibling that matches type
Definition XLXmlParser.cpp:95
bool remove_child(const xml_node &n)
Definition XLXmlParser.hpp:173
XMLNode append_child(pugi::xml_node_type type_)
Definition XLXmlParser.hpp:160
OpenXLSX_xml_node()
Default constructor. Constructs a null object.
Definition XLXmlParser.hpp:89
const pugi::char_t * child_value(const pugi::char_t *name_) const
Definition XLXmlParser.hpp:156
XMLNode find_child_by_attribute(const pugi::char_t *attr_name, const pugi::char_t *attr_value) const
Definition XLXmlParser.hpp:176
XMLNode next_sibling() const
Definition XLXmlParser.hpp:152
size_t child_count_of_type(pugi::xml_node_type type_=pugi::node_element) const
count node children that match type
Definition XLXmlParser.cpp:74
XMLNode previous_sibling(const pugi::char_t *name_) const
Definition XLXmlParser.hpp:153
XMLNode next_sibling_of_type(pugi::xml_node_type type_=pugi::node_element) const
get next node sibling that matches type
Definition XLXmlParser.cpp:87
bool set_name(const pugi::char_t *rhs, size_t size, bool force_ns=false)
Definition XLXmlParser.hpp:158
XMLNode insert_child_before(pugi::xml_node_type type_, const xml_node &node)
Definition XLXmlParser.hpp:167
XMLNode insert_child_after(pugi::xml_node_type type_, const xml_node &node)
Definition XLXmlParser.hpp:166
const pugi::char_t * raw_name() const
get actual node name from pugi::xml_node::name, including namespace, if any
Definition XLXmlParser.hpp:141
XMLNode insert_child_after(const pugi::char_t *name_, const xml_node &node, bool force_ns=false)
Definition XLXmlParser.hpp:168
XMLNode find_child_by_attribute(const pugi::char_t *name_, const pugi::char_t *attr_name, const pugi::char_t *attr_value) const
Definition XLXmlParser.hpp:174
NameProxy namespaced_name_proxy(const pugi::char_t *name_, bool force_ns) const
add this node's namespace to name_
Definition XLXmlParser.cpp:44
XMLNode prepend_child(const pugi::char_t *name_, bool force_ns=false)
Definition XLXmlParser.hpp:164
const pugi::char_t * name() const
get node name while stripping namespace, if so configured (name_begin > 0)
Definition XLXmlParser.hpp:135
XMLNode parent() const
for all functions returning xml_node: invoke base class function, but with a return type of XMLNode (...
Definition XLXmlParser.hpp:146
XMLNode insert_child_before(const pugi::char_t *name_, const xml_node &node, bool force_ns=false)
Definition XLXmlParser.hpp:170
bool remove_child(const pugi::char_t *name_)
Definition XLXmlParser.hpp:172
XMLNode first_child_of_type(pugi::xml_node_type type_=pugi::node_element) const
get first node child that matches type
Definition XLXmlParser.cpp:52
Definition IZipArchive.hpp:18
constexpr const bool XLForceNamespace
Definition XLXmlParser.hpp:32
bool disable_xml_namespaces()
Set NO_XML_NS to true.
Definition XLXmlParser.cpp:23
bool enable_xml_namespaces()
Set NO_XML_NS to false.
Definition XLXmlParser.cpp:13
pugi::xml_attribute XMLAttribute
Definition XLXmlParser.hpp:64
thread_local bool NO_XML_NS
Definition XLXmlParser.cpp:11
Definition XLCellIterator.hpp:121