xmltextwriter преобразует специальные символы - PullRequest
1 голос
/ 18 ноября 2011

Я получаю специальные символы, преобразованные в результате преобразования файла xslt.
Кто-нибудь испытывал это раньше?

В исходном документе есть символ &, который в результате представлен как &. Мне нужен оригинальный символ & даже в результате.

XmlDataDocument dd = new XmlDataDocument(ds);

XsltSettings settings = new XsltSettings();
settings.EnableDocumentFunction = true;
settings.EnableScript = true;

XslCompiledTransform transform = new XslCompiledTransform();

transform.Load(XmlReader.Create(new StringReader(transformSource.Transform)), settings, new XmlUrlResolver());

XsltArgumentList a = new XsltArgumentList();

a.AddExtensionObject("http://www.4plusmedia.tv", new TransformationHelper());

using (XmlTextWriter writer = new XmlTextWriter(path, System.Text.Encoding.UTF8))
{
    writer.Formatting = Formatting.Indented;
    transform.Transform(dd, a, writer);
}

Ответы [ 3 ]

1 голос
/ 18 ноября 2011

В исходном документе есть символ, который в результате представлен как &.

Не паникуйте, поскольку проблем нет :это точно такой же символ &, который должен быть представлен в любом правильно оформленном XML-документе.

Вы можете видеть, что это точно такой же символ, получить строковое значение узла и вывести его- вы увидите, что выводится только &.

Другой способ убедиться, что это просто символ & в XSLT, для вывода его, когда для метода вывода установлено значение "text".Вот небольшой полный пример:

XML-документ :

<t>M &amp; M</t>

Преобразование :

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>

 <xsl:template match="/*">
  <xsl:value-of select="."/>
 </xsl:template>
</xsl:stylesheet>

Результат :

M & M
1 голос
/ 18 ноября 2011

Если вы хотите, чтобы XslCompiledTransform выводил простой текстовый файл в результате преобразования XSLT, вам не следует преобразовывать его в созданный вами XmlTextWriter, а вместо этого преобразовывать в FileStream или TextWriter .

1 голос
/ 18 ноября 2011

Ваша часть вывода using (XmlTextWriter writer = ...) { ... }

Это означает, что ваш вывод является XML.Вы можете использовать XSLT для создания простого текста, который будет другим.

Для вывода XML и HTML кодировка &amp; необходима и необходима.

На каком-то этапе будет использоваться значение ваших элементов XML, и именно в этом месте (и когда) &amp;снова становится &.

...