将参数传递给Visual Studio的XSLT调试器

9
我正在使用Visual Studio调试一个转换。正常情况下使用该转换的应用程序还会传递一些参数:
XslTransform xslTransform = new XslTransform();
xslTransform.Load(myXslt);
XsltArgumentList transformArgumentList = new XsltArgumentList();
transformArgumentList.AddParam(paramName1, String.Empty, paramValue1); // this
transformArgumentList.AddParam(paramName2, String.Empty, paramValue2); // and this
xslTransform.Transform(inputStream, transformArgumentList, outputStream);

我该如何在调试时设置参数?


好问题,+1。请查看我的答案以获取解决方案和全面的示例。 - Dimitre Novatchev
1个回答

7

我该如何在调试时设置参数?

您应该使用以下的XslCompiledTransform构造函数

public XslCompiledTransform(
    bool enableDebug
)

enableDebug参数设置为true

然后您就可以开始调试,调试器将在您的XSLT转换中设置断点时停止。

以下是一个示例:

// Enable XSLT debugging.
XslCompiledTransform xslt = new XslCompiledTransform(true);

// Load the style sheet.
xslt.Load("MyTransformation.xsl");

// Create the writer.
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent=true;
XmlWriter writer = XmlWriter.Create("output.xml", settings);

// Execute the transformation.
xslt.Transform("books.xml", writer);
writer.Close();

当然,如果你懒得做,你可以直接在XSLT样式表中硬编码参数的值:
<xsl:param name="param1" select="SomeValue1"/>
<xsl:param name="param2" select="SomeValue2"/>

这是唯一的方法吗?我宁愿不必每次运行整个应用程序,因为在进行转换之前已经完成了相当多的工作。 - Justin R.
如果您不想在XSLT代码中硬编码<xsl:param>,那么这是调试和传递参数的唯一方法。否则,您可以硬编码参数:<xsl:param name="pMyParam" select="MyValue"/> - Dimitre Novatchev
选择的值不应该被 ''包裹起来吗?例如:<xsl:param name="param2" select="'SomeValue2'"/> - Malachi
1
@Malachi 是的,但这将作为参数的值传递,字符串(字面上'SomeValue2'。我们都明白此代码中使用的通用名称实际上意味着:在此处放入您的特定值。这个特定值可能是一个字符串常量--那么周围的引号是必要的,但它也可能是一个数字或布尔值或表达式,在所有这些情况下都不应该有任何周围的引号。 - Dimitre Novatchev
@DimitreNovatchev 感谢您的澄清,Dimitre。我今天学习了一些XSLT,看到了您的帖子,对我很有帮助 :) - Malachi
只是为了帮助澄清Justin的疑虑,硬编码的值充当默认值,可以使用VS xml调试器调试样式表。您可以在运行时提供您的“实际”值,这些默认值将被覆盖。 - Rik Bradley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接