0

我有一个 C# 控制台应用程序,它使用 XSLT 文档Transformer.xsl将大约 100 个 XML 文件批量转换为不同的标记。这些 XML 文件中的每一个都包含一个主题层次结构,这些主题层次结构根据文档标题及其层次位置分配了一个 ID,例如

<topic id="BSAR_1.5.2">...some content...</topic>

为此,我使用GetFileNameWithoutExtension C# 方法获取文件名并将其用作 ID,方法是将其作为参数传递给XSLCompliedTransform 。

我知道该参数在 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 时使用什么 Transformer。目前使用的转换器方法是XslCompiledTransform.Transform(string URI, string ResultsFile)。我正在努力寻找一个版本,它允许中间有一个参数,同时仍然直接在 C# 资源库中输出到 XML 文件。

简单地说,需要什么方法(或过程)来模仿

xslTrans.Transform(xmlPath,argXSLT,output);

其中XMLpathoutput都是 XML 文件,而argsXSLT是传入的参数,因为当前版本返回类型错误。如有必要,将添加示例 XML 和 XSLT。

4

1 回答 1

1

如果您前往 MSDN,您应该会看到 Transform 方法的各种重载版本

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 。

于 2013-09-17T07:48:18.383 回答