summaryrefslogtreecommitdiff
path: root/src/rexmpp.c
diff options
context:
space:
mode:
authordefanor <defanor@uberspace.net>2020-11-20 20:09:28 +0300
committerdefanor <defanor@uberspace.net>2020-11-20 20:09:28 +0300
commit29002b52c9c031efaebfddef74ef8ceed6fd0157 (patch)
treeed22eaf06307eb6ffeb4a1606037392200f76242 /src/rexmpp.c
parent896304f7e00221fac40825d8072bc0bbc6fae1b0 (diff)
Add rexmpp_xml_parse
This is intended mostly for language bindings, which may prefer to avoid libxml2, and to rely on serialized XML for bridging.
Diffstat (limited to 'src/rexmpp.c')
-rw-r--r--src/rexmpp.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/rexmpp.c b/src/rexmpp.c
index e9adeef..14d8159 100644
--- a/src/rexmpp.c
+++ b/src/rexmpp.c
@@ -696,7 +696,17 @@ xmlNodePtr rexmpp_xml_set_delay (rexmpp_t *s, xmlNodePtr node) {
return node;
}
-char *rexmpp_xml_serialize(xmlNodePtr node) {
+xmlNodePtr rexmpp_xml_parse (const char *str, int str_len) {
+ xmlNodePtr elem = NULL;
+ xmlDocPtr doc = xmlReadMemory(str, str_len, "", "utf-8", XML_PARSE_NONET);
+ if (doc != NULL) {
+ elem = xmlCopyNode(xmlDocGetRootElement(doc), 1);
+ xmlFreeDoc(doc);
+ }
+ return elem;
+}
+
+char *rexmpp_xml_serialize (xmlNodePtr node) {
xmlBufferPtr buf = xmlBufferCreate();
xmlSaveCtxtPtr ctx = xmlSaveToBuffer(buf, "utf-8", 0);
xmlSaveTree(ctx, node);