强制xslt document()通过HTTP而不是直接从文件系统加载外部文档

时间:2009-11-19 02:35:20

标签: .net asp.net xml xslt

在我的ASP.NET应用程序中,我使用document()方法将XML文件加载到XSLT中,如下所示:

<xsl:variable name="more-xml" select="document('generateXml.ashx')" />

当我在本地运行它时工作正常,但是当我将它部署到服务器时失败,因为服务器通过文件系统找到generateXml.ashx,因此IIS不处理它。

如果我像这样对URL进行硬编码:

<xsl:variable name="more-xml" select="document('http://server/app/generateXml.ashx')" />

然后文档地址始终通过HTTP解析,因此它可以一致地工作 - 但我不想将URL硬编码到XSLT中。有没有办法强制document()使用HTTP代替FILE作为相对路径?

1 个答案:

答案 0 :(得分:0)

不使用XSLT中的document()方法加载XML,而是使用XmlArgumentsList使用XML填充<xsl:param>

XsltArgumentList args = new XsltArgumentList();
args.AddParam("more-xml", string.Empty, myXmlDocument.CreateNavigator().SelectChildren(XPathNodeType.All));

// pass the argument list to the transform
myXslCompiledTransform.Transform(sourceXml, args, myXmlWriter);

然后在XSLT中:

<xsl:param name="more-xml"></xsl:param>