当前位置: 首页 > 编程语言 > C#

C#如何对内存对象进行实时xslt转换?分享

时间:2023-04-10 14:00:28 C#

C#如何对内存对象进行实时xslt转换?我有一个采用2个参数的函数:1=XML文件,2=XSLT文件,然后执行转换并返回生成的HTML。函数如下://////将XSLT样式应用于任何XML文件并返回呈现的HTML。/////////XML文档的文件名。/////////XSL文档的文件名。/////////呈现的HTML。///publicstringTransformXml(stringxmlFileName,stringxslFileName){varxtr=newXmlTextReader(xmlFileName){WhitespaceHandling=WhitespaceHandling.None};varxd=newXmlDocument();xd.Load(xtr);varxslt=newSystem.Xml.Xsl.XslCompiledTransform();xslt.Load(xslFileName);varstm=newMemoryStream();xslt.Transform(xd,null,stm);stm.Position=1;varsr=newStreamReader(stm);xtr.关闭();返回sr.ReadToEnd();我想将函数更改为不接受XML文件,而只接受一个对象。如果将对象序列化为文件,则该对象与xslt完全兼容。但是我不想先将它序列化为一个文件。回顾一下:保留文件中的xslt,但xml输入应该是我传递的对象,并且想要在没有任何文件系统交互的情况下生成xml。您可以将对象序列化为字符串,将字符串加载到XmlDocument中,然后执行转换:publicstringTransformXml(objectdata,stringxslFileName){XmlSerializerxs=newXmlSerializer(data.GetType());字符串xmlString;使用(StringWriterswr=newStringWriter()){xs.Serialize(swr,data);xmlString=swr.ToString();}varxd=newXmlDocument();xd.LoadXml(xmlString);varxslt=新的System.Xml。Xsl.XslCompiledTransform();xslt.Load(xslFileName);varstm=newMemoryStream();xslt.Transform(xd,null,stm);stm.Position=0;varsr=newStreamReader(stm);返回sr.读到结束();这是一个将对象转换为XDocument的函数(如果您尚未使用XDocument,则可以将其更改为XmlDocument)。当然,如果对象不可序列化,这将抛出异常。publicstaticXDocumentConvertToXml(thisTo){StringBuilderbuilder=newStringBuilder();StringWriterwriter=newStringWriter(builder);XmlSerializer序列化器=newXmlSerializer(typeof(T));serializer.Serialize(writer,o);StringReaderreader=newStringReader(builder.ToString());返回XDocument.Load(阅读器);}这是一个publicstaticXmlDocumentConvertToXml(thisToXml){StringBuilderbuilder=newStringBuilder();StringWriterwriter=newStringWriter(builder);XmlSerializer序列化器=newXmlSerializer(typeof(T));serializer.Serialize(writer,o);StringReaderreader=newStringReader(builder.ToString());XmlDocumentdoc=newXmlDocument();doc.Load(阅读器);返回文档;未测试,但您可以使用XPathDocument获取Stream,并且由于XPathDocument实现了IXPathNavigable,您可以使用它进行转换:publicstringTransformXml(StreamxmlFile,stringxslFileName){vardoc=newXPathDocument(xmlFile);varxslt=newSystem.Xml.Xsl.XslCompiledTransform();xslt.Load(xsl文件名);varstm=newMemoryStream();xslt.Transform(doc,null,stm);stm.Position=1;varsr=newStreamReader(stm);返回sr.ReadToEnd();看看这篇文章,它描述了可以导航对象图属性的XPathNavigator的创建,它是XPath和XSLT的强大组合。如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: