关于xml:如何在C#中应用XSLT样式表

关于xml:如何在C#中应用XSLT样式表

How to apply an XSLT Stylesheet in C#

我想使用C#将XSLT样式表应用于XML文档,并将输出写入文件。


我在这里找到了可能的答案:http://web.archive.org/web/20130329123237/http://www.csharpfriends.com/Articles/getArticle.aspx?articleID=63

从文章:

1
2
3
4
5
XPathDocument myXPathDoc = new XPathDocument(myXmlFile) ;
XslTransform myXslTrans = new XslTransform() ;
myXslTrans.Load(myStyleSheet);
XmlTextWriter myWriter = new XmlTextWriter("result.html",null) ;
myXslTrans.Transform(myXPathDoc,null,myWriter) ;

编辑:

但是我可信赖的编译器说,XslTransform已经过时了:使用XslCompiledTransform代替:

1
2
3
4
5
XPathDocument myXPathDoc = new XPathDocument(myXmlFile) ;
XslCompiledTransform myXslTrans = new XslCompiledTransform();
myXslTrans.Load(myStyleSheet);
XmlTextWriter myWriter = new XmlTextWriter("result.html",null);
myXslTrans.Transform(myXPathDoc,null,myWriter);

基于达伦的出色答案,请注意,使用适当的XslCompiledTransform.Transform重载可以大大缩短此代码:

1
2
3
var myXslTrans = new XslCompiledTransform();
myXslTrans.Load("stylesheet.xsl");
myXslTrans.Transform("source.xml","result.html");

(很抱歉将其作为答案,但是注释中的code block支持非常有限。)

在VB.NET中,您甚至不需要变量:

1
2
3
4
With New XslCompiledTransform()
    .Load("stylesheet.xsl")
    .Transform("source.xml","result.html")
End With


这是有关如何在MSDN上用C#进行XSL转换的教程:

http://support.microsoft.com/kb/307322/en-us/

这里是如何写文件:

http://support.microsoft.com/kb/816149/en-us

只是作为一个旁注:如果您也想进行验证,这是另一个教程(针对DTD,XDR和XSD(= Schema)):

http://support.microsoft.com/kb/307379/en-us/

我添加此只是为了提供更多信息。


这可能对您有帮助

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public static string TransformDocument(string doc, string stylesheetPath)
{
    Func<string,XmlDocument> GetXmlDocument = (xmlContent) =>
     {
         XmlDocument xmlDocument = new XmlDocument();
         xmlDocument.LoadXml(xmlContent);
         return xmlDocument;
     };

    try
    {
        var document = GetXmlDocument(doc);
        var style = GetXmlDocument(File.ReadAllText(stylesheetPath));

        System.Xml.Xsl.XslCompiledTransform transform = new System.Xml.Xsl.XslCompiledTransform();
        transform.Load(style); // compiled stylesheet
        System.IO.StringWriter writer = new System.IO.StringWriter();
        XmlReader xmlReadB = new XmlTextReader(new StringReader(document.DocumentElement.OuterXml));
        transform.Transform(xmlReadB, null, writer);
        return writer.ToString();
    }
    catch (Exception ex)
    {
        throw ex;
    }

}


推荐阅读

    linux命令输出加时间?

    linux命令输出加时间?,时间,系统,名称,设备,命令,信息,管理,标准,数字,百度,l

    linux命令日志输出?

    linux命令日志输出?,系统,状态,命令,情况,对比,标准,实时,服务,下来,数据,怎

    linux命令输出到vi?

    linux命令输出到vi?,工作,系统,状态,档案,命令,模式,信息,正规,第一,编辑,lin

    linux命令输出截取?

    linux命令输出截取?,位置,网上,信息,命令,字符串,字符,左边,日志,中间,之间,L

    linux进入文档命令?

    linux进入文档命令?,工作,地址,图片,系统,标准,命令,信息,设备,一致,发行,Lin

    linux命令输出计算?

    linux命令输出计算?,标准,地址,工作,信息,系统,命令,软件,数据,文件,控制台,l

    linux持续命令输出?

    linux持续命令输出?,系统,工作,地址,信息,情况,状态,数据,管理,工具,指标,lin

    linux命令行打印输出?

    linux命令行打印输出?,地址,工作,命令,网络,信息,标准,系统,文件,目录,控制

    linux命令输出最大值?

    linux命令输出最大值?,地址,网络,系统,时间,数据,高位,较大,位置,不了,最大

    linux上传文档命令?

    linux上传文档命令?,服务,工具,密码,系统,软件,工作,电脑,综合,命令,文件,Lin

    linux如何命令建文档?

    linux如何命令建文档?,时间,名字,文件,系统,新增,命令,文件名,密码,工作,目

    linux写入文件命令?

    linux写入文件命令?,标准,单位,系统,首次,代码,数字,名称,位置,文件,命令,qpr

    linux命令行动态输出?

    linux命令行动态输出?,标准,工作,信息,系统,命令,地址,文件,数据,管理,设备,l

    linux命令打开文档?

    linux命令打开文档?,系统,软件,图片,电脑,一致,环境,名称,发行,中心,官方网

    linux剪切文档命令是?

    linux剪切文档命令是?,标准,系统,数据,文件,命令,地方,第一,位置,电子,名字,l

    linux输出命令窗口?

    linux输出命令窗口?,系统,工具,首页,终端,技术,电脑,命令,窗口,快捷键,桌面,l

    linux输出命令全集?

    linux输出命令全集?,工作,标准,地址,信息,管理,系统,目录,文件,命令,情况,lin

    linux简单的文档命令?

    linux简单的文档命令?,系统,地址,标准,工作,命令,数据,管理,时间,信息,单位,l

    linux命令写入文件?

    linux命令写入文件?,状态,系统,文件,命令,时间,资料,名字,软件,终端,目录,请

    linux查询文档命令?

    linux查询文档命令?,工作,地址,标准,命令,管理,信息,文件,目录,内容,终端,lin