5 #include <boost/algorithm/string/replace.hpp>
31 pugi::xml_node node =
doc_.find_node(p1);
37 if (node.type() != pugi::node_pi) {
38 for (node = node.first_child(); node; node = node.next_sibling()) {
41 if (node.type() == pugi::node_pcdata ||
42 node.type() == pugi::node_cdata)
54 pugi::xml_node node =
doc_.find_node(p1);
61 pugi::xml_node node =
doc_.find_node(p1);
68 pugi::xml_node node =
node_;
70 if (node.type() != pugi::node_pi) {
71 for (node = node.first_child(); node; node = node.next_sibling()) {
74 if (node.type() == pugi::node_pcdata ||
75 node.type() == pugi::node_cdata)
97 pugi::xml_node tmp =
node_.next_sibling();
104 pugi::xml_node tmp =
node_.next_sibling();
115 pugi::xml_attribute tmp =
node_.attribute(str.c_str());
121 pugi::xml_attribute tmp =
node_.first_attribute();
127 pugi::xml_attribute tmp =
attrib_.next_attribute();
137 pugi::xml_node tmp =
node_.parent();
145 doc_.save(
writer_,
"", pugi::format_default, pugi::encoding_utf8);
147 if (
ts_ == 0)
return -1;
148 return static_cast<int>(
ts_);
154 doc_.save(
writer_,
"", pugi::format_raw | pugi::format_no_declaration);
156 if (
ts_ == 0)
return -1;
157 return static_cast<int>(
ts_);
161 doc_.print(os,
" ", pugi::format_raw | pugi::format_no_declaration);
165 doc_.print(os,
" ", pugi::format_indent | pugi::format_no_declaration);
177 pugi::xml_parse_result ret =
doc_.load_buffer(document.c_str(), document.size(),
179 pugi::encoding_utf8);
181 LOG(DEBUG,
"XML doc load failed, code: " << ret <<
" " << ret.description());
182 LOG(DEBUG,
"Error offset: " << ret.offset <<
" (error at [..." << (document.c_str() + ret.offset) <<
"]");
183 LOG(DEBUG,
"Document: " << document);
195 pugi::xml_node node_s;
196 pugi::xml_node node1;
197 pugi::xml_node node2;
200 node1 =
doc_.find_node(p1);
204 node_s = xp->
doc_.first_child();
206 node2 = node1.parent().append_copy(node_s);
216 node =
doc_.append_child(key.c_str());
218 node =
node_.parent().append_child(key.c_str());
221 node.text().set(value.c_str());
230 pugi::xml_node node =
doc_.find_node(p1);
234 node.parent().remove_child(key.c_str());
240 pugi::xml_node node =
doc_.find_node(p1);
244 node.text().set(value.c_str());
254 node =
doc_.append_child(key.c_str());
256 node =
node_.append_child(key.c_str());
259 node.text().set(value.c_str());
267 const std::string &key,
268 const std::string &value) {
271 pugi::xml_node node1 =
doc_.find_node(p1);
286 pugi::xml_attribute attrib;
289 attrib =
node_.append_attribute(key.c_str()) = value.c_str();
292 node_.insert_attribute_after(key.c_str(),
attrib_) = value.c_str();
302 pugi::xml_attribute tmp =
node_.attribute(key.c_str());
307 pugi::xml_attribute attrib = tmp.next_attribute();
308 res =
node_.remove_attribute(tmp);
310 return (res ? -1 : 0);
316 if (
node_.type() == pugi::node_null)
320 pugi::xml_attribute tmp =
node_.attribute(key.c_str());
324 tmp.set_value(value.c_str());
virtual int LoadDoc(const std::string &doc)
pugi::xml_node FindNode(const std::string &name)
virtual const char * ReadNextNode()
virtual const char * ReadParentName()
virtual int ModifyNode(const std::string &key, const std::string &value)
virtual void write(const void *data, size_t sz)
virtual const char * ReadNodeValue()
virtual void RewindNode()
virtual const char * ReadChildNode()
virtual int WriteRawDoc(uint8_t *buf)
pugi::xml_node RootNode()
virtual void PrintDocFormatted(std::ostream &os) const
virtual int DeleteAttribute(const std::string &key)
static pugi::xml_attribute GAttr
virtual void PrintDoc(std::ostream &os) const
virtual int AddAttribute(const std::string &key, const std::string &value)
static pugi::xml_node GNode
virtual int AddChildNode(const std::string &key, const std::string &value)
bool IsNull(pugi::xml_node &node)
virtual const char * ReadNodeName(const std::string &name)
virtual int ModifyAttribute(const std::string &key, const std::string &value)
virtual const char * ReadChildNodeName()
virtual const char * ReadAttrib(const std::string &str)
virtual const char * ReadNode(const std::string &name)
virtual int AddNode(const std::string &key, const std::string &value)
void SetBuf(const void *buf, size_t sz)
virtual int WriteDoc(uint8_t *buf)
virtual void AppendDoc(const std::string &str, XmlBase *a_doc)
virtual int DeleteNode(const std::string &key)
pugi::xml_attribute attrib_
virtual const char * ReadNextNodeName()
virtual void RewindAttrib()
virtual const char * ReadNextAttrib()
#define LOG(_Level, _Msg)
struct xmpp_buf_write writer_
virtual int AddChildNodeAfter(const std::string &node_name, const std::string &key, const std::string &value)
virtual const char * ReadFirstAttrib()
void SetContext(pugi::xml_node node=GNode, pugi::xml_attribute atrib=GAttr)