2009-11-18 43 views
0

我在我们的CRM系统中嵌入了一个HTML控件,并用它来显示一些XML。我想使用XSL文档格式化它。我可以将XSL的内联规范放入XML文档吗?

一切工作正常,当我用的test.xml和test.xsl本地测试,但当然,当我改变XSL链接

\\servername\share\test.xsl 

那么它不工作,我想是因为该位置不受信任。

我可以将XSL插入XML文档吗?当我无法真正使用相对路径时,我还能如何格式化浏览器控件的内容?

感谢

+0

忘了提及XML是由.Net应用程序使用XMLDocument等生成的 – Cylindric 2009-11-18 14:48:15

+3

'\ servername \ share'?您是否尝试将XSL与XML一起放在Web服务器上?这应该工作。 – Tomalak 2009-11-18 15:55:40

+0

那么,XML就会生成并存储在数据库字段中,并且只是在窗体上的浏览器控件中显示出来 - 它实际上并不存在任何“真实”的地方。 现在,我已经使用了应用程序自己的每个用户文件夹,并将XSL文件和生成的XML复制到那里,这样它们对浏览器都是“本地”的。 希望浏览器中不需要临时文件的解决方案:( – Cylindric 2009-11-19 09:44:34

回答

0

一种技术我经常使用的是编译XSLT到我的.NET程序集的清单资源。如果您的XSLT文件位于Visual Studio中,则可以在文件属性中将“构建操作”设置为“嵌入式资源”。然后资源的名称成为项目的默认命名空间,后面跟着文件的名称(我认为....通常我编译程序集,然后用ILDASM在清单中查找名称来检查名称)。

无论如何 - 一旦你知道这个名字,你可以得到这样的功能转换(注意,这是我的事业装配,因此GetCallingAssembly ....在不同的设计,你可以使用GetExecutingAssembly):

public static XslCompiledTransform GetTransformByResourceName(string resourceName) 
{ 
    XslCompiledTransform transform = new XslCompiledTransform(false); 
    using (Stream manifestResourceStream = 
      Assembly.GetCallingAssembly().GetManifestResourceStream(resourceName)) 
    using (XmlTextReader reader = new XmlTextReader(manifestResourceStream)) 
    { 
    XsltSettings settings = new XsltSettings(false, false); 
    transform.Load(reader, settings, new XmlUrlResolver()); 
    } 
    return transform; 
} 

当然,在某些方面,您失去了一些灵活性/可配置性,但至少您知道您的代码将能够找到XSLT。

我不知道您的设计是否知道将转换移动到服务器是否有帮助。即使您必须执行转换客户端,如果您已经从.NET应用程序提供XML,那么也可以使用XSLT,但在这种情况下无需单独将其部署到文件系统。

相关问题