通过C#将XPath作为参数传递给XSLT,

时间:2012-11-09 10:53:10

标签: c# xslt xpath xslt-1.0

不太确定这种方法的重要性,但我只想尝试一下。而不是使用XML DOM并直接在C#中使用XPath读取Value,是否可以将字符串作为参数传递给XSLT,而在XSLT中将其用作XPath?

C#:

.........
......

XsltArgumentList xslArg = new XsltArgumentList();
xslArg.AddParam("XPathTest", "", SomedynamicString);
XsltSettings xslsettings = new XsltSettings(false, true);
xslTransform.Load(string_xslInput, xslsettings, new XmlUrlResolver());
xslTransform.Transform(xpathXmlOrig, xslArg, objMemoryStream);
.........
......

XSLT:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" xmlns:crnObj="urn:UTCCalc">
  <xsl:output method="xml" indent="no"/>
  <xsl:param name="XPathTest"/>
.........
.......

  <xsl:template match=??$XPathTest$$??> How can the param be used?
     <!--code goes here-->
  </xsl:template>
.........
.......

3 个答案:

答案 0 :(得分:2)

  

而不是使用XML DOM并直接使用XPath读取Value   C#,是否可以将字符串作为参数传递给XSLT和XSLT使用   它作为XPath?

不在XSLT 1.0或XSLT 2.0中。

在XSLT 3.0(仍然是工作草案)中,可以使用 xsl:evaluate 指令。

您可能会感兴趣的是 XPath Visualizer 如何做到这一点:XPath表达式用于动态修改特定xsl:variable的值 - 甚至之前调用转换。

声明:

XPath Visualizer不用于销售和/或盈利 - 我在12年前创建它是为了娱乐而且仅用于教育目的。

答案 1 :(得分:1)

如果您的XSLT处理器实现了xx:evaluate()扩展来评估作为字符串提供的XPath表达式,它将起作用。这是一个非常常见的扩展,但它在XSLT 1.0或2.0中都不是标准的。

答案 2 :(得分:0)

.NET转换引擎支持扩展 - 您可以通过以下方式执行此操作:

  • 创建XsltArgumentList并使用命名空间字符串和类的实例调用AddExtensionObject;
  • 使用xmlns:prefix=
  • 在样式表中引用相同的命名空间字符串
  • 只需在样式表中声明其(合格)名称即value-of select='prefix:MyMethod'
  • ,即可调用扩展程序上的方法