1

VSで開発したXSLT変換があります。VSを使用して実行すると(XML-> Show Xslt Outputを介して)うまく機能します。ただし、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エンジンを使用していますか?任意のガイダンスをいただければ幸いです。

4

3 に答える 3

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"
  />

初めて働きました!MSBuildのXSLTオプションの概要を説明してくれた、都会のカヌークでのBryanCookの功績

于 2012-02-23T15:35:33.343 に答える
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;
}
于 2009-11-23T14:56:40.080 に答える
0

RootTag は、変換の実行後ではなく実行前に適用されます。xslt を記述するときに RootTag を考慮に入れると、機能します

于 2015-04-28T16:01:57.247 に答える