Fremdebrichtsbrichts sächsische XSLT -AusgabeC#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Fremdebrichtsbrichts sächsische XSLT -Ausgabe

Post by Anonymous »

Ich habe ein XML -Dokument wie dieses (für dieses Beispiel vereinfacht): < /p>

Code: Select all


Detail Invoice
1


Detail Invoice
2


Detail Invoice
3


< /code>
Verwenden von XSLT möchte ich diesen in Registerkartendelimited-Text wie folgt verwandeln: < /p>
NoticeType\tApplication
Detail Invoice\t1
Detail Invoice\t2
Detail Invoice\t3
< /code>
Hier ist das Stylesheet, das ich verwende: < /p>



NoticeType&#x9;Application&#xA;


&#x9;

&#xA;



< /code>
Ich rufe die Transformation in .NET 8.0 mit saxoncs 12.4 wie folgt auf: < /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>
Aber die Ausgabe erhalte ich so: < /p>
NoticeType  Application

Detail Invoice
\t
1

Detail Invoice
\t
2

Detail Invoice
\t
3
Kann jemand sagen, was ich falsch mache? P> per Martin Honnens Vorschlag habe ich versucht, einen saxon.api.serializer zu verwenden, und das gab die erwartete Ausgabe. Hier ist ein aktualisiertes C# Code -Beispiel: < /p>

Code: Select all

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);
Sobald dies SB ausgeführt hat, enthält die erwartete Ausgabe. Ich habe nicht tief genug Einblicke in Saxon, um zu verstehen, warum die Verwendung des Serializer vs. Just Output.tosting () einen Unterschied macht. Ich bin nur froh, dass es funktioniert.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post