是否可以将XML流作为参数传递给XSLT?

时间:2011-03-11 11:13:45

标签: .net xml xslt

我遇到以下问题:在转换中(在内存中完全完成)应该接收包含另一个XML流的附加XSLT参数。 这就像在内存中合并两个XML文档一样。将其写在驱动器上并动态加载它是不可能的。

开发我将.Net与Visual Studio 2010一起使用。

2 个答案:

答案 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>