summaryrefslogtreecommitdiff
path: root/xmlwriter.c
diff options
context:
space:
mode:
Diffstat (limited to 'xmlwriter.c')
-rw-r--r--xmlwriter.c26
1 files changed, 22 insertions, 4 deletions
diff --git a/xmlwriter.c b/xmlwriter.c
index 099d3f0..76d7549 100644
--- a/xmlwriter.c
+++ b/xmlwriter.c
@@ -936,6 +936,12 @@ xmlTextWriterStartElement(xmlTextWriterPtr writer, const xmlChar * name)
return -1;
case XML_TEXTWRITER_NONE:
break;
+ case XML_TEXTWRITER_ATTRIBUTE:
+ count = xmlTextWriterEndAttribute(writer);
+ if (count < 0)
+ return -1;
+ sum += count;
+ /* fallthrough */
case XML_TEXTWRITER_NAME:
count = xmlOutputBufferWriteString(writer->out, ">");
if (count < 0)
@@ -1832,12 +1838,26 @@ xmlTextWriterEndAttribute(xmlTextWriterPtr writer)
sum += count;
while (!xmlListEmpty(writer->nsstack)) {
+ xmlChar *namespaceURI = NULL;
+ xmlChar *prefix = NULL;
+
lk = xmlListFront(writer->nsstack);
np = (xmlTextWriterNsStackEntry *) xmlLinkGetData(lk);
+
+ if (np != 0) {
+ namespaceURI = xmlStrdup(np->uri);
+ prefix = xmlStrdup(np->prefix);
+ }
+
+ xmlListPopFront(writer->nsstack);
+
if (np != 0) {
count =
- xmlTextWriterWriteAttribute(writer, np->prefix,
- np->uri);
+ xmlTextWriterWriteAttribute(writer, prefix,
+ namespaceURI);
+ xmlFree(namespaceURI);
+ xmlFree(prefix);
+
if (count < 0) {
xmlListDelete(writer->nsstack);
writer->nsstack = NULL;
@@ -1845,8 +1865,6 @@ xmlTextWriterEndAttribute(xmlTextWriterPtr writer)
}
sum += count;
}
-
- xmlListPopFront(writer->nsstack);
}
break;