如何在c#中使用XSLT转换xml字符串

本文关键字:XSLT 转换 xml 字符串 | 更新日期: 2023-09-27 18:04:05

我想使用XSLT转换包含xml的字符串,这是针对哥伦比亚公司的,所以我有以下代码(不要试图理解它):

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="/>

和我在服务器上存储了一个名为InvoiceTFD.xslt的XLST 这是XSLT文件

我想创建一个方法来返回经过转换的数据的字符串,它应该是这样的(XSLT就是这样做的):

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

问题1是XslTransform。Transform方法创建了一个新文件,我不想写一个文件

概括地说,我只想取一个字符串,使用我拥有的XSLT文件转换它,然后返回一个转换后的字符串,而不需要在服务器上创建文件,就是这样!

我相信这并不难,但是我是。net的新手,所以我真的不知道怎么做:(

提前感谢,祝你们有美好的一天!!

如何在c#中使用XSLT转换xml字符串

你可以写一个内存流:

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,使用XPathDocument和XslCompiledTransform。它们比XslTransform和XmlDocument快得多。即使使用XmlDocument来创建xml,也要将其转换为XPathDocument来进行转换。

Transform方法可以接受Stream outputStream参数。您可以创建StringWriter并将其作为输出流传递。

XslCompiledTransform代替XslTransform。使用方法:XslCompiledTransform.Transform,将结果保存到OutputStream.

我看到,您的XSLT是2.0版本。它们都不支持XSLT 2.0