如何在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的新手,所以我真的不知道怎么做:(
提前感谢,祝你们有美好的一天!!
你可以写一个内存流:
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