[英]How to trigger XML (XSLT) transformation by using C# code ? How to pass parameters (“param”s) to XSLT?
这是我发布的问题:
嗨,我有一个XSLT代码,它需要从C#代码中获取参数(例如一两个)。(如果您想知道,为什么我需要这样做,然后让我解释一下,我必须从中解析输入XML某些外部应用程序,但是我需要使用可以在复杂的C#代码中定义的某些其他应用程序的值来编辑某些标签的数据,我暂时不必担心。)我需要声明一些字符串,并在触发转换的操作之后将它们传递给XSLT。
我试图搜索google,但没有成功。 如果您对此一无所知,请向我发送相应的链接或信息..
因为我不熟悉C#(这就是问题所在),所以更简单的编码会很有帮助。
另外,请指定我应该选择的“项目类型”。
提前致谢 ..
解决方案在这里: http : //msdn.microsoft.com/zh-cn/library/system.xml.xsl.xsltargumentlist.addparam.aspx简单且工作非常方便..
thanQ MandoMando和thanQ“ stackoverflow”
一般来说,不必创建XmlDocument
或XDocument
类的DOM对象来执行转换。
XslCompiledTransfrom xslt = new XsltCompiledTransform()
xslt.Load(transformPath);
XsltArgumentList args = new XsltArgumentList();
args.AddParam("name", "myNamespace", value)
using (XmlReader xr = XmlReader.Create(inputPath))
using (XmlWriter xw = XmlWriter.Create(outputPath))
{
xslt.Transform(xr, args, xw);
}
请注意, XmlReader
和XmlWriter
的Create()
方法具有大量的重载。 进行原型制作时,我XmlWriter.Create(Console.Out)
使用XmlWriter.Create(Console.Out)
。
您看过这篇文章吗? 它谈论在C#中将参数传递给xslt。 我相信这是可能的。
快速又肮脏:
XmlDocument x = new XmlDocument();
x.Load("yourxmldoc.xml");
XslTransform t = new XslTransform();
XsltArgumentList xslArg = new XsltArgumentList();
xslArg.AddParam("parameterName", "", parameterValue);
StringWriter swEndDoc = new System.IO.StringWriter();
t.Load("yourdoc.xslt");
t.Transform(x, xslArg, swEndDoc, null);
String output = swEndDoc.ToString();
这非常简单-请注意,我正在使用XDocument和XslCompiledTransform:
XDocument xmlDocument = XDocument.Load(fromSource); // Or whatever means to get XML
XsltArgumentList xslArgs = new XsltArgumentList();
// For as many params as you need
xslArgs.AddParam("paramName", "", "paramValue");
// Create and load an XSLT transform - with params matching param names above
XslCompiledTransform t = new XslCompiledTransform();
t.Load(XSLTPath);
StringWriter outputDoc = new System.IO.StringWriter();
t.Transform(xmlDocument.CreateReader(), xslArgs, outputDoc);
String output = outputDoc.ToString();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.