2009-05-15 16 views
2

Ich möchte, dass es CDATA Abschnitte in meiner Ausgabe XML gibt. Ich habe versucht, das Attribut "cdata-sections-element" von xsl: output zu verwenden. Ich erhalte jedoch keine CDATA in meiner Ausgabe.Verwenden Sie XslCompiledTransform mit cdata-Abschnitt-Elementen

using System; 
using System.Xml; 
using System.Xml.Xsl; 
using System.IO; 
using System.Text; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string stylesheet = 
@"<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform""> 
<xsl:output xmlns:t=""temp-uri"" cdata-section-elements=""t:text"" method=""xml""/> 
<xsl:template match=""/""> 
<text xmlns=""temp-uri""><xsl:value-of select="".""/></text> 
</xsl:template> 
</xsl:stylesheet> 
"; 
      XmlReader reader = XmlReader.Create(new StringReader(stylesheet)); 
      XslCompiledTransform t = new XslCompiledTransform(true); 
      t.Load(reader); 

      XmlReader input = XmlReader.Create(new StringReader("<foo><![CDATA[<hello]]></foo>")); 
      StringBuilder sb = new StringBuilder(); 

      XmlWriter results = XmlWriter.Create(new StringWriter(sb)); 
      t.Transform(input, null, results); 

      Console.WriteLine(sb.ToString()); 
      Console.ReadLine(); 
     } 
    } 
} 

tatsächliche Ausgang

<?xml version="1.0" encoding="utf-16"?><text xmlns="temp-uri">&lt;hello</text> 

Erforderlich Ausgabe

<?xml version="1.0" encoding="utf-16"?><text xmlns="temp-uri"><!CDATA[<hello]]></text> 

Was bin ich hier?

Antwort

4

Ihre XmlWriter muss über die aktuellen Ausgabeeinstellungen informiert:

XmlWriter results = XmlWriter.Create(new StringWriter(sb), t.OutputSettings); 
//---------------------------------------------------------^^^^^^^^^^^^^^^^ 
Verwandte Themen