diff options
author | Nick Wellnhofer <wellnhofer@aevum.de> | 2020-07-28 21:52:55 +0200 |
---|---|---|
committer | Nick Wellnhofer <wellnhofer@aevum.de> | 2020-07-28 21:52:55 +0200 |
commit | 7b2e5172616406edcb5b84d048fa590c997784b3 (patch) | |
tree | 233120f29c10ffe7bb7a0d19ce88355c0dad3636 /xmlsave.c | |
parent | dc6f009280e6108fe25f4c4ce32e18fb69cf496e (diff) | |
download | libxml2-7b2e5172616406edcb5b84d048fa590c997784b3.tar.gz |
Fix *NodeDumpOutput functions
Only output end tag for elements. Should fix serialization of document
fragments.
Diffstat (limited to 'xmlsave.c')
-rw-r--r-- | xmlsave.c | 54 |
1 files changed, 30 insertions, 24 deletions
@@ -1049,9 +1049,8 @@ xmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) { while (1) { if (cur == root) return; - if (ctxt->format == 1) { + if (ctxt->format == 1) xmlOutputBufferWrite(buf, 1, "\n"); - } if (cur->next != NULL) { cur = cur->next; break; @@ -1065,21 +1064,25 @@ xmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) { (ctxt->level > ctxt->indent_nr ? ctxt->indent_nr : ctxt->level), ctxt->indent); + + if (cur->type == XML_ELEMENT_NODE) { + xmlOutputBufferWrite(buf, 2, "</"); + if ((cur->ns != NULL) && (cur->ns->prefix != NULL)) { + xmlOutputBufferWriteString(buf, + (const char *)cur->ns->prefix); + xmlOutputBufferWrite(buf, 1, ":"); + } + + xmlOutputBufferWriteString(buf, (const char *)cur->name); + if (ctxt->format == 2) + xmlOutputBufferWriteWSNonSig(ctxt, 0); + xmlOutputBufferWrite(buf, 1, ">"); + } + if (cur == unformattedNode) { ctxt->format = format; unformattedNode = NULL; } - - xmlOutputBufferWrite(buf, 2, "</"); - if ((cur->ns != NULL) && (cur->ns->prefix != NULL)) { - xmlOutputBufferWriteString(buf, (const char *)cur->ns->prefix); - xmlOutputBufferWrite(buf, 1, ":"); - } - - xmlOutputBufferWriteString(buf, (const char *)cur->name); - if (ctxt->format == 2) - xmlOutputBufferWriteWSNonSig(ctxt, 0); - xmlOutputBufferWrite(buf, 1, ">"); } } } @@ -1672,9 +1675,8 @@ xhtmlNodeDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) { while (1) { if (cur == root) return; - if (ctxt->format == 1) { + if (ctxt->format == 1) xmlOutputBufferWrite(buf, 1, "\n"); - } if (cur->next != NULL) { cur = cur->next; break; @@ -1688,19 +1690,23 @@ xhtmlNodeDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) { (ctxt->level > ctxt->indent_nr ? ctxt->indent_nr : ctxt->level), ctxt->indent); + + if (cur->type == XML_ELEMENT_NODE) { + xmlOutputBufferWrite(buf, 2, "</"); + if ((cur->ns != NULL) && (cur->ns->prefix != NULL)) { + xmlOutputBufferWriteString(buf, + (const char *)cur->ns->prefix); + xmlOutputBufferWrite(buf, 1, ":"); + } + + xmlOutputBufferWriteString(buf, (const char *)cur->name); + xmlOutputBufferWrite(buf, 1, ">"); + } + if (cur == unformattedNode) { ctxt->format = format; unformattedNode = NULL; } - - xmlOutputBufferWrite(buf, 2, "</"); - if ((cur->ns != NULL) && (cur->ns->prefix != NULL)) { - xmlOutputBufferWriteString(buf, (const char *)cur->ns->prefix); - xmlOutputBufferWrite(buf, 1, ":"); - } - - xmlOutputBufferWriteString(buf, (const char *)cur->name); - xmlOutputBufferWrite(buf, 1, ">"); } } } |