Hi All,
Can please someone provide an example of how to retrieve values from POST xml
data.
I use ap_xml_parse_input() to get and parse XML POST.
At the moment I can retrieve everything, including elements, attributes, cdata,
but the actual string values. How should I retrieve the values of "Tove",
"Jani", "Reminder", etc?
<xml>
<note urgency="important">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
<note1 urgency="urgent">
<to>Rose</to>
<from>Smith</from>
<heading>Reminder</heading>
<body>Give me a call.</body>
</note1>
</xml>
Here is a small code snippet:
static int example_handler(request_rec *r) {
apr_xml_doc *xmlData;
ap_rprintf(r, "Hello\n");
xmlData = readPost(r);
ap_rprintf(r, "Read POST...\n");
if (xmlData) {
ap_rprintf(r, "xmlData != NULL\n XML POST read successfully...\n");
ap_rprintf(r, "Root Element == %s\n", xmlData->root->name);
ap_rprintf(r, "Root First child = %s\n", xmlData->root->first_child->name);
ap_rprintf(r, "Root Last child = %s\n", xmlData->root->last_child->name);
ap_rprintf(r, "Root Next = %s\n", xmlData->root->first_child->next->name);
ap_rprintf(r, "ATTR_VAL = %s\n", xmlData->root->first_child->next->attr->value);
ap_rprintf(r, "private = %s\n", (char*)xmlData->root->first_child->next->priv);
ap_rprintf(r, "NALLOC = %i\n", xmlData->namespaces->nalloc);
ap_rprintf(r, "NELTS = %i\n", xmlData->namespaces->nelts);
ap_rprintf(r, "ELTS = %s\n", xmlData->namespaces->elts);
}
Return OK;
}
apr_xml_doc* readPost(request_rec *r) {
apr_array_header_t *pairs = NULL;
apr_xml_doc* pdoc = NULL;
apr_off_t len;
apr_size_t size;
int res;
int i = 0;
char *buffer;
res = ap_xml_parse_input(r, &pdoc);
if (res != OK || !pdoc) {ap_rprintf(r, "res = %i\n", res); ap_rprintf(r,
"Failed...\n"); return NULL;} /* Return NULL if we failed or if there are is no
POST data */
return pdoc;
}
Thank you :)