summaryrefslogtreecommitdiff
path: root/xmlsave.c
diff options
context:
space:
mode:
authorNick Wellnhofer <wellnhofer@aevum.de>2020-07-28 21:52:55 +0200
committerNick Wellnhofer <wellnhofer@aevum.de>2020-07-28 21:52:55 +0200
commit7b2e5172616406edcb5b84d048fa590c997784b3 (patch)
tree233120f29c10ffe7bb7a0d19ce88355c0dad3636 /xmlsave.c
parentdc6f009280e6108fe25f4c4ce32e18fb69cf496e (diff)
downloadlibxml2-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.c54
1 files changed, 30 insertions, 24 deletions
diff --git a/xmlsave.c b/xmlsave.c
index 2235c8ff..f2e0ea85 100644
--- a/xmlsave.c
+++ b/xmlsave.c
@@ -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, ">");
}
}
}