不太确定这种方法的重要性,但我只想尝试一下。而不是使用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>
.........
.......
答案 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'