static void addStrippedSerializedDoc(DFBuffer *result, DFDocument *doc, const char *filename) { if (doc != NULL) { DFStripWhitespace(doc->docNode); char *str = DFSerializeXMLString(doc,0,1); DFBufferFormat(result,"#item %s\n",filename); DFBufferFormat(result,"%s",str); free(str); } }
static int saveStrippedXMLText(DFStorage *storage, const char *filename, const char *input, NamespaceID defaultNS, DFError **error) { DFDocument *doc = DFParseXMLString(input,error); if (doc == NULL) return 0; DFStripWhitespace(doc->docNode); int ok = saveXMLDocument(storage,filename,doc,defaultNS,error); DFDocumentRelease(doc); return ok; }
void DFStripWhitespace(DFNode *node) { if (node->tag == DOM_TEXT) { char *trimmed = DFStringTrimWhitespace(node->value); if ((strlen(trimmed) == 0) && (node->parent != NULL)) DFRemoveNode(node); else DFSetNodeValue(node,trimmed); free(trimmed); } else { if (node->tag >= MIN_ELEMENT_TAG) { const char *space = DFGetAttribute(node,XML_SPACE); if ((space != NULL) && !strcmp(space,"preserve")) return; } DFNode *next; for (DFNode *child = node->first; child != NULL; child = next) { next = child->next; DFStripWhitespace(child); } } }