Посторонние линии разрывы на выходе саксонского XSLTC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Посторонние линии разрывы на выходе саксонского XSLT

Сообщение Anonymous »

У меня есть такой документ XML (упрощен для этого примера): < /p>

Код: Выделить всё


Detail Invoice
1


Detail Invoice
2


Detail Invoice
3


< /code>
Используя XSLT, я хочу преобразовать это в текст, определенный вкладками, как это: < /p>
NoticeType\tApplication
Detail Invoice\t1
Detail Invoice\t2
Detail Invoice\t3
< /code>
Вот таблица стилей, которую я использую: < /p>



NoticeType	Application



	






< /code>
Я вызываю преобразование в .net 8.0 с Saxoncs 12.4 Например: < /p>
System.Xml.Linq.XElement xml = System.Xml.Linq.XElement.Parse("{xml}");
System.Xml.Linq.XElement stylesheet = System.Xml.Linq.XElement.Parse("{xslt}");
Saxon.Api.Processor processor = new(true);
Saxon.Api.XsltCompiler comp = processor.NewXsltCompiler();
List errs = [];
comp.ErrorReporter = errs.Add;
Saxon.Api.XsltExecutable exe = comp.Compile(stylesheet.CreateReader());
Saxon.Api.Xslt30Transformer xfrm = exe.Load30();
Saxon.Api.XdmValue output = xfrm.ApplyTemplates(xml.CreateReader());
< /code>
Но вывод, который я получаю, выглядит так: < /p>
NoticeType  Application

Detail Invoice
\t
1

Detail Invoice
\t
2

Detail Invoice
\t
3
может кто -нибудь сказать, что я делаю не так? P> за предложение Мартина Хоннена я попытался использовать Saxon.api.serializer , и это дало ожидаемый выход. Вот обновленный пример кода C#: < /p>

Код: Выделить всё

System.Xml.Linq.XElement xml = System.Xml.Linq.XElement.Parse("{xml}");
System.Xml.Linq.XElement stylesheet = System.Xml.Linq.XElement.Parse("{xslt}");
Saxon.Api.Processor processor = new(true);
Saxon.Api.XsltCompiler comp = processor.NewXsltCompiler();
List errs = [];
comp.ErrorReporter = errs.Add;
Saxon.Api.XsltExecutable exe = comp.Compile(stylesheet.CreateReader());
Saxon.Api.Xslt30Transformer xfrm = exe.Load30();
Saxon.Api.Serializer ser = processor.NewSerializer();
System.Text.StringBuilder sb = new();
using System.IO.StringWriter sw = new(sb);
ser.OutputWriter = sw;
xfrm.ApplyTemplates(xml.CreateReader(), ser);
после запуска Sb содержит ожидаемый вывод. У меня нет достаточно глубокого понимания саксона, чтобы понять, почему использование сериализатора против просто output.tosting () имеет значение. Я просто рад, что он работал.

Подробнее здесь: https://stackoverflow.com/questions/794 ... slt-output
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»