2009-11-06 102 views
1

我有一個在VS中開發的XSLT轉換。當我使用VS來運行它時,它很好用(通過XML-> Show Xslt Output)。但是,當我通過MsBuildCommunityTasks Xslt任務執行它時,我會得到截然不同的結果。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引擎?任何指導將不勝感激。

+5

沒有一些輸入,xslt,正確的輸出和不正確的輸出,這是很難調試的。 – 2009-11-06 16:41:32

回答

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

我有麻煩<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" 
    /> 

爲我工作的第一次!感謝布賴恩·庫克the urban canuk, eh中的MSBuild

0

的RootTag提供的XSLT選項很好的概述應用改造前運行,而不是之後。在編寫xslt時考慮RootTag,它會起作用