Ausschließen XML-Direktive von XslCompiledTransform.Transform Ausgang
-
20-09-2019 - |
Frage
Ich bin ein XsltCompiledTransform
mit einigen XML in ein Fragment von HTML zu transformieren (keine vollständigen HTML-Dokument, nur einen DIV, dass ich in Seite ist an anderer Stelle generiert).
Ich mache die Transformation wie folgt:
StringBuilder output = new StringBuilder();
XmlReader rawData = BusinessObject.GetXml();
XmlWriter transformedData = XmlWriter.Create(output);
XslCompiledTransform transform = new XslCompiledTransform();
transform.Load("stylesheet.xslt");
transform.Transform(rawData, transformedData);
Response.Write(output.ToString());
Mein Problem ist, dass das Ergebnis der Transformation beginnt immer mit dieser XML-Direktive:
<?xml version="1.0" encoding="utf-16"?>
Wie verhindere ich dies in meinen transformierten Daten erscheinen?
EDIT:
Ich sage die XSLT, dass ich will es nicht zur Ausgabe eine XML-Deklaration mit
<xsl:output method="html" version="4.0" omit-xml-declaration="yes"/>
aber dies scheint keine Auswirkungen auf die Richtlinie in meiner Ausgabe erscheinen zu lassen.
Interessanterweise sowohl meine XML-Datenquelle und meine XSLT-Transformation geben sich als UTF-8
nicht UTF-16
.
UPDATE:
Die UTF-16 scheint erscheinen zu werden, weil ich einen String (Builder) als Ausgabemechanismus verwenden. Wenn ich den Code ändern, um ein MemoryStream
anstelle einem StringBuilder
zu verwenden, wird meine UTF-8-Codierung erhalten. Ich vermute, das hat etwas mit der internen Funktionsweise des string
Art zu tun und wie es befasst sich mit Codierung.
Lösung
Sie benötigen ein XmlWriterSettings
Objekt zu verwenden. Legen Sie seine Eigenschaften, um die XML-Deklaration zu unterlassen, und übergibt es an den Konstruktor Ihrer XmlWriter
.
StringBuilder output = new StringBuilder();
XmlReader rawData = BusinessObject.GetXml();
XmlWriterSettings writerSettings = new XmlWriterSettings();
writerSettings.OmitXmlDeclaration = true;
using (XmlWriter transformedData = XmlWriter.Create(output, writerSettings))
{
XslCompiledTransform transform = new XslCompiledTransform();
transform.Load("stylesheet.xslt");
transform.Transform(data, transformedData);
Response.Write(output.ToString());
}
Andere Tipps
Der einfachste Weg, um diesen Knoten zu Ihrem XSLT hinzuzufügen wäre:
<xsl:output
method="html"
omit-xml-declaration="yes"/>