2017-04-10 88 views
0

如何使用ASP.NET Core中的XSLT將XML轉換爲HTML?如何使用C#中的XSLT將XML轉換爲HTML?

我想過:

public static string TransformXMLToHTML(string inputXml, string xsltString) 
{ 
    XslCompiledTransform transform = new XslCompiledTransform(); 
    using(XmlReader reader = XmlReader.Create(new StringReader(xsltString))) { 
     transform.Load(reader); 
    } 
    StringWriter results = new StringWriter(); 
    using(XmlReader reader = XmlReader.Create(new StringReader(inputXml))) { 
     transform.Transform(reader, null, results); 
    } 
    return results.ToString(); 
} 

但XMLReader不能在.NET的核心存在。

你有什麼想法嗎?

回答

0

System.Xml.Xsl消失.NET Core 1.0作爲XSD (XmlSchema)XSLT (XslTransform).NET Standard 1.0不被支持,其中.NET Core實現直到版本」 .NET核2.0' 。 好消息是,自.NET Core 2.0它實現了.NET Standard 2.0,所以我們有System.Xml.Xsl再次

如果您正在使用所有這些standardsframeworksplatforms迷茫,看在這個崗位.NET Standard 2.0 is out and it’s impressive!!!!視頻,看到了.NET Standard Versions表 瞭解平臺實現什麼每一個新的支持.NET是什麼標準,什麼版。

因此,要回答你的問題,您需要將您.NET Core應用程序升級到.NET Core 2.0和您的代碼將重新工作。

public static string TransformXMLToHTML(string inputXml, string xsltString) 
{ 
    XslCompiledTransform transform = new XslCompiledTransform(); 
    using(XmlReader reader = XmlReader.Create(new StringReader(xsltString))) { 
     transform.Load(reader); 
    } 
    StringWriter results = new StringWriter(); 
    using(XmlReader reader = XmlReader.Create(new StringReader(inputXml))) { 
     transform.Transform(reader, null, results); 
    } 
    return results.ToString(); 
} 

如果您需要返回XDocument您可以在下面的代碼,它類似於你的,只是返回「XML」文件的實例:

public XDocument Transform(string xml, string xsl) 
{ 
    var originalXml = XDocument.Load(new StringReader(xml)); 

    var transformedXml = new XDocument(); 
    using (var xmlWriter = transformedXml.CreateWriter()) 
    { 
     var xslt = new XslCompiledTransform(); 
     xslt.Load(XmlReader.Create(new StringReader(xsl))); 

     // Add XSLT parameters if you need 
     XsltArgumentList xsltArguments = null; // new XsltArgumentList(); 
     // xsltArguments.AddParam(name, namespaceUri, parameter); 

     xslt.Transform(originalXml.CreateReader(), xsltArguments, xmlWriter); 
    } 

    return transformedXml; 
}