可以将xsl集成到xml中

时间:2013-10-09 11:08:11

标签: c# xml xslt linq-to-xml

我正在使用XDocument创建一个xml文件,该文件使用xsl文件作为样式表。我想使xml可下载我没有问题,但我遇到的问题是,当我只想下载一个文件时,我有两个文件。

我使用以下内容来包含链接:

doc.AddFirst(new XProcessingInstruction("xml-stylesheet", "type='text/xsl' href='Stylesheet.XSL'"));

是否可以将xsl文件合并到XDocument对象中?

编辑: 发现我可以这样做:

XDocument transformedDoc = new XDocument();
        using (XmlWriter writer = transformedDoc.CreateWriter())
        {
            XslCompiledTransform transform = new XslCompiledTransform();
            transform.Load(XmlReader.Create(new StringReader(HttpContext.Current.Server.MapPath("~/XML/CareLog.xsl"))));
            transform.Transform(doc.CreateReader(), writer);
        }
        transformedDoc.Save(HttpContext.Current.Server.MapPath("~/BrowserTemp/CareLog.xml"));

但是我在transform.Load()行上得到错误“root级别的数据无效”?我需要注意什么?

1 个答案:

答案 0 :(得分:0)

直接从标准...简单示例,但在XML中嵌入样式表: http://www.w3.org/TR/xslt#section-Embedding-Stylesheets

<?xml-stylesheet type="text/xml" href="#style1"?>
<doc>
<head>
<xsl:stylesheet id="style1"
            version="1.0"
            xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
            xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:template match="id('foo')">
<fo:block font-weight="bold"><xsl:apply-templates/></fo:block>
</xsl:template>
<xsl:template match="xsl:stylesheet">
 <!-- ignore -->
</xsl:template>
</xsl:stylesheet>
</head>
<body>
<para id="foo">
...
</para>
</body>
</doc>