Skip to content

Commit 61e0c4e

Browse files
committed
Respect <xsl:output>-settings, but omit xml-declaration if no output-settings specified
1 parent a2d1399 commit 61e0c4e

1 file changed

Lines changed: 29 additions & 4 deletions

File tree

xslt-cli/XslTransformer.cs

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
using System;
1+
using System;
22
using System.Data;
33
using System.IO;
4+
using System.Text;
45
using System.Xml;
56
using System.Xml.Xsl;
67

@@ -66,14 +67,38 @@ private static string TransformDataSet(DataSet dataSet, string xslt)
6667
dataSet.WriteXml(dataSetXmlWriter);
6768
dataSetOutputStream.Position = 0;
6869

70+
var stringBuilder = new StringBuilder();
71+
72+
var outputSettings = CreateOutputSettings(xslTransform.OutputSettings);
73+
6974
using (var dataSetXml = new XmlTextReader(dataSetOutputStream))
70-
using (var resultOutputStream = new MemoryStream())
71-
using (var resultWriter = new XmlTextWriter(resultOutputStream, encoding))
75+
using (var resultWriter = XmlWriter.Create(stringBuilder, outputSettings))
7276
{
7377
xslTransform.Transform(dataSetXml, resultWriter);
74-
return encoding.GetString(resultOutputStream.ToArray());
78+
return stringBuilder.ToString();
7579
}
7680
}
7781
}
82+
83+
private static XmlWriterSettings CreateOutputSettings(XmlWriterSettings settingsFromReader)
84+
{
85+
return new XmlWriterSettings
86+
{
87+
Async = settingsFromReader.Async,
88+
CheckCharacters = settingsFromReader.CheckCharacters,
89+
CloseOutput = settingsFromReader.CloseOutput,
90+
ConformanceLevel = settingsFromReader.ConformanceLevel,
91+
DoNotEscapeUriAttributes = settingsFromReader.DoNotEscapeUriAttributes,
92+
Encoding = settingsFromReader.Encoding,
93+
Indent = settingsFromReader.Indent,
94+
IndentChars = settingsFromReader.IndentChars,
95+
NamespaceHandling = settingsFromReader.NamespaceHandling,
96+
NewLineChars = settingsFromReader.NewLineChars,
97+
NewLineHandling = settingsFromReader.NewLineHandling,
98+
NewLineOnAttributes = settingsFromReader.NewLineOnAttributes,
99+
OmitXmlDeclaration = settingsFromReader.OutputMethod == XmlOutputMethod.AutoDetect || settingsFromReader.OmitXmlDeclaration,
100+
WriteEndDocumentOnClose = settingsFromReader.WriteEndDocumentOnClose
101+
};
102+
}
78103
}
79104
}

0 commit comments

Comments
 (0)