我在我们的CRM系统中嵌入了一个HTML控件,并用它来显示一些XML。我想使用XSL文档格式化它。我可以将XSL的内联规范放入XML文档吗?
一切工作正常,当我用的test.xml和test.xsl本地测试,但当然,当我改变XSL链接
\\servername\share\test.xsl
那么它不工作,我想是因为该位置不受信任。
我可以将XSL插入XML文档吗?当我无法真正使用相对路径时,我还能如何格式化浏览器控件的内容?
感谢
我在我们的CRM系统中嵌入了一个HTML控件,并用它来显示一些XML。我想使用XSL文档格式化它。我可以将XSL的内联规范放入XML文档吗?
一切工作正常,当我用的test.xml和test.xsl本地测试,但当然,当我改变XSL链接
\\servername\share\test.xsl
那么它不工作,我想是因为该位置不受信任。
我可以将XSL插入XML文档吗?当我无法真正使用相对路径时,我还能如何格式化浏览器控件的内容?
感谢
一种技术我经常使用的是编译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,但在这种情况下无需单独将其部署到文件系统。
忘了提及XML是由.Net应用程序使用XMLDocument等生成的 – Cylindric 2009-11-18 14:48:15
'\ servername \ share'?您是否尝试将XSL与XML一起放在Web服务器上?这应该工作。 – Tomalak 2009-11-18 15:55:40
那么,XML就会生成并存储在数据库字段中,并且只是在窗体上的浏览器控件中显示出来 - 它实际上并不存在任何“真实”的地方。 现在,我已经使用了应用程序自己的每个用户文件夹,并将XSL文件和生成的XML复制到那里,这样它们对浏览器都是“本地”的。 希望浏览器中不需要临时文件的解决方案:( – Cylindric 2009-11-19 09:44:34