c# - XSLT 的输出参数

标签 c# .net xslt xslt-1.0

我很熟悉将 Input Param 传递给 XSLT CompiledTransformation 类,以便解析器在 XSL 文件中提供的处理指令中使用 Param 来处理 XSL 文件。

有没有一种方法可以让我们从 XSLT 到 C# 等宿主语言获取输出参数(比如节点的值或其他东西)?

XslCompiledTransform xslTransform = new XslCompiledTransform();

string strXmlOutput = string.Empty;
StringWriter swXmlOutput = null;
MemoryStream objMemoryStream = null;
XPathDocument xpathXmlOrig = new XPathDocument(string_xmlInput);
swXmlOutput = new StringWriter();
objMemoryStream = new MemoryStream();

xslArg.AddParam("TESTING", "", SomeVar);
XsltSettings xslsettings = new XsltSettings(false, true);

xslTransform.Load(string_xslInput, xslsettings, new XmlUrlResolver());
xslTransform.Transform(xpathXmlOrig, xslArg, objMemoryStream);

这段代码确实输出了转换后的 XML,但我的问题是我们可以只将一个值作为 XSL 转换(XSLT 文件)的输出参数吗?

像这样:

xslArg.OutputParam("testing"); //Something like this?
........
........
xslTransform.Transform(xpathXmlOrig, xslArg, objMemoryStream);
string outputparam = xslArg.GetParam("testing"); //ideal way of getting param after traformation!

XSLT 是否为这样的事情提供范围?

最佳答案

在 C# 中,您最好的选择是输入 <xsl:message> XSLT 代码中的说明,并挂接到 XsltMessageEncountered XsltArgumentList 上的事件类。

您可以通过观察应用程序的输出来测试它是否在不 Hook 事件的情况下为您提供正确的输出 - 在没有事件处理程序的情况下,消息将通过管道传输到标准输出。

关于c# - XSLT 的输出参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14159319/

相关文章:

c# - Oracle Managed DataAccess 连接对象保持连接打开

xml - 如何查找具有相同 child 的节点

xslt - 使用 xslt 将具有日、月、年的 xml 中的内容转换为 YYYYMMDD 格式的另一个 xml 日期

c# - 即使调用更改时 bool 仍然为 false

c# - 如何检测在 Roslyn 中委托(delegate)转换的隐式方法?

c# - Visual Studio 2019 进入定义状态,Intellisense 不起作用

c# - 为什么 C# 允许将匿名对象分配给属于类类型的类字段?

python - 为什么我在使用 Erlang 19.1.1 的 .Net Client 到 RabbitMQ 时出现 SSL 握手失败,但在 17.4、18.1 和 18.2 中却没有?

c# - 与 LAN 上的应用程序通信

xslt - XSL - 如果变量来自字符串,如何将其设置为整数