我有一个在VS中开发的XSLT转换。当我使用VS来运行它时(通过XML->显示Xslt输出),它工作得很好。但是,当我通过MsBuildCommunityTasks Xslt任务执行它时,我得到了截然不同的结果。
具体来说,输出只是我在XSLT中甚至没有引用的少数元素的内容。我想默认转换正在捡起它们。
我的任务声明无法更简单:
<Xslt
Inputs="BuildLogs\partcover-results.xml"
Xsl="ExtTools\xslt\partcover.assembly.report.xsl"
RootTag=""
RootAttributes=""
Output="partcover.assembly.report.html"
/>
也许msbuildtasks正在使用与VS内部不同的XSLT引擎?任何指导都将不胜感激。
答案 0 :(得分:2)
我无法让<Xslt />
工作。从.NET 4.0开始,内置了XmlTransformation任务。以下是您查找示例的方式:
<XslTransformation
OutputPaths="partcover.assembly.report.html"
XmlInputPaths="BuildLogs\partcover-results.xml"
XslInputPath="ExtTools\xslt\partcover.assembly.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,它将起作用