我遇到以下问题:在转换中(在内存中完全完成)应该接收包含另一个XML流的附加XSLT参数。 这就像在内存中合并两个XML文档一样。将其写在驱动器上并动态加载它是不可能的。
开发我将.Net与Visual Studio 2010一起使用。
答案 0 :(得分:1)
哪种编程语言,您使用哪种XSLT处理器? XSLT处理器采用哪种参数取决于处理器,例如使用.NET的XslCompiledTransform,您当然可以在XSLT代码中定义全局参数,然后使用XsltArgumentList传入从流创建的IXPathNavigable(即XmlDocument或XPathDocument)。
答案 1 :(得分:0)
.NET可能(我已经测试了4.0)。它使用以下代码:
C#:
XslCompiledTransform proc = new XslCompiledTransform();
proc.Load(path + "test_parameter.xslt");
System.IO.TextWriter result = new StreamWriter(path + "result.html");
XmlDocument docA = new XmlDocument();
docA.Load(path + "documentA.xml");
XmlDocument docB = new XmlDocument();
docB.Load(path + "documentB.xml");
XsltArgumentList xsltArgs = new XsltArgumentList();
xsltArgs.AddParam("xmlDoc", "", docB);
proc.Transform(docA, xsltArgs, result);
XSLT:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- THIS FILE GENERATES A SIMPLE HTML -->
<xsl:output method="html" indent="yes"/>
<xsl:param name="xmlDoc" />
<xsl:template match="/document">
<xsl:apply-templates select="$xmlDoc/foo/bar"/>
</xsl:template>
</xsl:stylesheet>