Xslt任务无法按预期工作

时间:2009-11-06 16:38:59

标签: msbuild xslt msbuildcommunitytasks

我有一个在VS中开发的XSLT转换。当我使用VS来运行它时(通过XML->显示Xslt输出),它工作得很好。但是,当我通过MsBuildCommunityTasks Xslt任务执行它时,我得到了截然不同的结果。

具体来说,输出只是我在XSLT中甚至没有引用的少数元素的内容。我想默认转换正在捡起它们。

我的任务声明无法更简单:

<Xslt 
  Inputs="BuildLo​gs\partcover-result​s.xml" 
  Xsl="ExtTools\​xslt\partcover.asse​mbly.report.xsl​" 
  RootTag="" 
  RootAttributes="" 
  Output="partcov​er.assembly.report.h​tml" 
/>

也许msbuildtasks正在使用与VS内部不同的XSLT引擎?任何指导都将不胜感激。

3 个答案:

答案 0 :(得分:2)

我无法让<Xslt />工作。从.NET 4.0开始,内置了XmlTransformation任务。以下是您查找示例的方式:

  <XslTransformation 
   OutputPaths="partcov​er.assembly.report.h​tml" 
   XmlInputPaths="BuildLo​gs\partcover-result​s.xml"
   XslInputPath="ExtTools\​xslt\partcover.asse​mbly.report.xsl"
  />

第一次为我工作!感谢Bryan Cook在the urban canuk, eh提供了对MSBuild中XSLT选项的精彩概述

答案 1 :(得分:0)

我还花了一些时间试图让这个Xslt任务正常工作,摆弄RootTag和属性。大约2个小时后,我放弃了,而是编写了我自己的任务来完成这项工作,这是我第一次尝试......

public override bool Execute()
{
    bool result = true;

    Log.LogMessage("Transforming from {0} to {1} using {2}",
        XmlFile, OutputFile, XsltFile);

    XmlWriter xmlWriter = null;

    try
    {
        XslCompiledTransform xslTransform = GetXslTransform(XsltFile);
        XmlReader xmlReader = GetXmlReader(XmlFile);
        xmlWriter = GetXmlWriter(OutputFile);
        xslTransform.Transform(xmlReader, xmlWriter);
    }
    catch (Exception e)
    {
        Log.LogErrorFromException(e);
        result = false;
    }
    finally
    {
        if (xmlWriter != null)
        {
            xmlWriter.Flush();
            xmlWriter.Close();
        }
    }

    return result;
}

答案 2 :(得分:0)

RootTag在转换运行之前应用,而不是之后。在编写xslt时考虑RootTag,它将起作用