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.

War es hilfreich?

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"/>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top