franko_camron
franko_camron

Reputation: 1293

How to transform an xml string using a XSLT in C#

I'd like to transform a string that contains an xml using a XSLT, it's for a Colombian company, so I have the following code (don't try to understand it):

string xmlTFDNode = @<tfd:TimbreFiscalDigital  xmlns:tfd="http://www.sat.gob.mx/TimbreFiscalDigital"  xsi:schemaLocation="http://www.sat.gob.mx/TimbreFiscalDigital TimbreFiscalDigital.xsd"  selloCFD="tOSe+Ex/wvn33YlGwtfmrJwQ31Crd7lI9VcH63TGjHfxk5vfb3q9uSbDUGk9TXvo70ydOpikRVw+9B2Six0m bu3PjoPpO909oAYITrRyomdeUGJ4vmA2/12L86EJLWpU7vIt4cL8HpkEw7TOFhSdpzb/890+jP+C1adBsHU1VHc=" FechaTimbrado="2010-03-06T20:40:10" UUID="ad662d33-6934-459c-a128-bdf0393e0f44"   noCertificadoSAT="30001000000100000801" version="1.0"  selloSAT="j5bSpqM3w0+shGtImqOwqqy6+d659O78ckfstu5vTSFa+2CVMj6Awfr18x4yMLGBwk6ruYbjBlVURodEIl6n JIhTTUtYQV1cbRDG9kvvhaNAakxqaSOnOx79nHxqFPRVoqh10CsjocS9PZkSM2jz1uwLgaF0knf1g8pjDkLYwlk="/>

and I have a XLST stored on the server named InvoiceTFD.xslt This is the XSLT file

I want to create a method to return a string with the data transformed, it shoud look like this (that's what the XSLT does):

||1.0|ad662d33-6934-459c-a128-bdf0393e0f44|2001-12-
17T09:30:47Z|iYyIk1MtEPzTxY3h57kYJnEXNae9lvLMgAq3jGMePsDtEOF6XLWbrV2GL/
2TX00vP2+YsPN+5UmyRdzMLZGEfESiNQF9fotNbtA487dWnCf5pUu0ikVpgHvpY7YoA4
lB1D/JWc+zntkgW+Ig49WnlKyXi0LOlBOVuxckDb7EAx4=|12345678901234 567890||

The problem I is that the XslTransform.Transform method creates a new file, and I don't want to write a file

Recapitulating, I just want to take a string, transform it using a XSLT file I have, and return a string with the transformation without creating files on the server, that's it!

I believe it's not that hard, but I'm new in .NET so I really don't know how to do it :(

Thanks in advance and have a great day guys !!

Upvotes: 2

Views: 3584

Answers (3)

Kirill Polishchuk
Kirill Polishchuk

Reputation: 56162

Use XslCompiledTransform instead of XslTransform. Use method: XslCompiledTransform.Transform, save result to OutputStream.

As I see, your XSLT is version 2.0. Neither of them support XSLT 2.0.

Upvotes: 0

Andrew Bezzub
Andrew Bezzub

Reputation: 16032

Transform method can take Stream outputStream parameter. You can create StringWriter and pass it as output stream.

Upvotes: 0

aepheus
aepheus

Reputation: 8187

You can write to a memory stream:

MemoryStream oStream = new MemoryStream()
oXslt.Transform(new XPathDocument(new XmlNodeReader(oXml)), null, oStream );
oStream.Position = 0
StreamReader oReader = new StreamReader(oStream);
string output = oReader.ReadToEnd();

BTW, use XPathDocument and XslCompiledTransform. They are much faster than XslTransform and XmlDocument. Even if you use an XmlDocument to create the xml, covert it to an XPathDocument for the transform.

Upvotes: 2

Related Questions