示例#1
0
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);
    }
}
示例#2
0
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;
}
示例#3
0
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);
        }
    }
}