从 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。

从 XML 到新 XML 的转换,包括使用 C# 和 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。