2009-11-06 4 views
1

У меня есть преобразование XSLT, которое я разработал в VS. Он отлично работает, когда я использую 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 использует другой XSLT двигатель, чем VS использует внутри? Любые рекомендации будут оценены.

+5

Без ввода, xslt, правильный вывод и некорректный вывод, от этого трудно отлаживать. –

ответ

0

Я также потратил некоторое время на попытку заставить эту задачу Xslt работать, играя с RootTag и Attributes. Через несколько часов я 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 для обеспечения хорошего обзора вариантов XSLT в MSBuild

0

The RootTag применяется перед тем преобразование запускаются, а не после. Возьмите RootTag во внимание при написании xslt, и он будет работать

Смежные вопросы