从 XML 到新 XML 的转换,包括使用 C# 和 XSLT 的参数
本文关键字:XML XSLT 参数 到新 转换 包括使 | 更新日期: 2023-09-27 18:31:29
我有一个 C# 控制台应用程序,它使用 XSLT 文档 Transformer.xsl 将大约 100 个 XML 文件批量转换为不同的标记。这些XML文件中的每一个都包含一个主题层次结构,这些主题根据文档标题及其层次结构位置分配一个ID,例如
<topic id="BSAR_1.5.2">...some content...</topic>
为此,我使用 GetFileNameWithoutExtension C# 方法来获取文件名,并通过 XSLCompliedTransform 作为参数传递它作为 ID。
我知道该参数在 XSL 文档内部工作,因为它已经使用 Oxygen 进行了测试,并且我知道如果没有该参数,XSL 转换器在 C# 中按如下方式运行。
//create XSLT complied transformer
XslCompiledTransform xslTrans = new XslCompiledTransform();
//load in xslt
xslTrans.Load(xslPath);string fileExtension = Path.GetFileName(xmlPath);
string output= (pathDITA+"/DITA_"+fileExtension);
//Add arguments for TopicID
//XsltArgumentList argXSLT = new XsltArgumentList();
//String fileID = Path.GetFileNameWithoutExtension(xmlPath);
//argXSLT.AddParam("topicID","",fileID);
//convert XML document
xslTrans.Transform(xmlPath, output);
其中 pathDITA 是应用程序中文件输出到何处的变量,参数部分已被注释掉。
我的问题是,当想要从XML转换为XML(包括参数)时,使用什么转换器。目前使用的转换器方法是 XslCompiledTransform.Transform(string URI, string ResultsFile)。我正在努力寻找一个版本,该版本允许在中间进行参数,同时仍直接输出到 C# 资源库中的 XML 文件。
简单地说,需要什么方法(或过程)来模仿
xslTrans.Transform(xmlPath,argXSLT,output);
其中 XMLpath 和输出都是 XML 文件,argsXSLT 是传入的参数,因为当前版本返回类型错误。如有必要,将添加示例XML和XSLT。
如果您转到 MSDN,您应该会看到转换方法的各种重载版本
http://msdn.microsoft.com/en-us/library/System.Xml.Xsl.XslCompiledTransform.Transform.aspx
所以,你应该看到虽然它允许Transform(String, String)
没有Transform(String, XSLTArgumentList, String)
。例如,您可以使用的是Transform(String, XsltArgumentList, XmlWriter)
// Create the XslCompiledTransform and load the stylesheet.
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load(xslPath);
string fileExtension = Path.GetFileName(xmlPath);
string output = (pathDITA+"/DITA_"+fileExtension);
XsltArgumentList argXSLT = new XsltArgumentList();
String fileID = Path.GetFileNameWithoutExtension(xmlPath);
argXSLT.AddParam("topicID","",fileID);
using (XmlWriter w = XmlWriter.Create(output))
{
xslt.Transform(xmlPath, argXSLT, w);
}
有关此方法的示例,请参阅 http://msdn.microsoft.com/en-us/library/ms163439.aspx。