Используйте XslCompiledTransform с cdata-section-elements - PullRequest
2 голосов
/ 15 мая 2009

Я хочу, чтобы в моем выходном XML были разделы CDATA. Я попытался использовать атрибут "cdata-section-element" в xsl: output. Тем не менее, я не получаю CDATA в моем выводе.

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();
        }
    }
}

Фактическая выработка

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

Требуемый вывод

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

Что мне здесь не хватает?

1 Ответ

4 голосов
/ 15 мая 2009

Ваш XmlWriter должен быть проинформирован о текущих настройках вывода:

XmlWriter results = XmlWriter.Create(new StringWriter(sb), t.OutputSettings);
//---------------------------------------------------------^^^^^^^^^^^^^^^^
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...