+
+static int match_xsd_XML_n(xmlNodePtr ptr, const char *elem, ODR o,
+ char **val, int *len)
+{
+ xmlBufferPtr buf;
+
+ if (!match_element(ptr, elem))
+ return 0;
+ ptr = ptr->children;
+ if (!ptr)
+ return 0;
+ buf = xmlBufferCreate();
+
+ xmlNodeDump(buf, ptr->doc, ptr, 0, 0);
+
+ *val = odr_malloc(o, buf->use+1);
+ memcpy (*val, buf->content, buf->use);
+ (*val)[buf->use] = '\0';
+
+ if (len)
+ *len = buf->use;
+
+ xmlBufferFree(buf);
+
+ return 1;
+}
+