MSBuild.Community.Tasks の Xslt を使ってみた

これもハマったので書いてみる。

XsltSample.proj

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="3.5" DefaultTargets="XsltSample" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" />

  <PropertyGroup>
    <XmlFile>$(MSBuildProjectDirectory)/Sample.xml</XmlFile>
    <XslFile>$(MSBuildProjectDirectory)/Style.xsl</XslFile>
  </PropertyGroup>
  <Target Name="XsltSample">
    <Xslt Inputs="$(XmlFile)" Xsl="$(XslFile)" Output="$(MSBuildProjectDirectory)\Result.html" />
  </Target>
</Project>

複数の XML をマージしてスタイルシートを適用する場合は、

  <PropertyGroup>
    <XmlFile>$(MSBuildProjectDirectory)/Sample.xml</XmlFile>
    <XslFile>$(MSBuildProjectDirectory)/Style.xsl</XslFile>
  </PropertyGroup>
  <Target Name="XsltSample">
    <Xslt Inputs="$(XmlFile)" Xsl="$(XslFile)" Output="$(MSBuildProjectDirectory)\Result.html" />
  </Target>

をこんな感じに書き替えます。

  <ItemGroup>
    <XmlFiles Include="$(MSBuildProjectDirectory)\*.xml" />
  </ItemGroup>
  <PropertyGroup>
    <XslFile>$(MSBuildProjectDirectory)/Style.xsl</XslFile>
  </PropertyGroup>
  <Target Name="XsltSample">
    <Xslt Inputs="@(XmlFiles)" RootTag="HOGE" Xsl="$(XslFile)" Output="$(MSBuildProjectDirectory)\Result.html" />
  </Target>

Xslt タスクの RootTag プロパティでマージした際のルートタグを指定出来ます。

XSL にパラメータを渡したい場合は、

  <ItemGroup>
    <XmlFiles Include="$(MSBuildProjectDirectory)\*.xml" />
  </ItemGroup>
  <PropertyGroup>
    <XslFile>$(MSBuildProjectDirectory)/Style.xsl</XslFile>
  </PropertyGroup>
  <Target Name="XsltSample">
    <Xslt Inputs="@(XmlFiles)" RootTag="HOGE" Xsl="$(XslFile)" Output="$(MSBuildProjectDirectory)\Result.html" />
  </Target>

をこんな感じに書き替えます。XSL ファイルを Property 要素 から Item 要素に変更し、ItemMetadata 要素に XSL のパラメータを指定します。

  <ItemGroup>
    <XmlFiles Include="$(MSBuildProjectDirectory)\*.xml" />
    <XslFile Include="$(MSBuildProjectDirectory)/Style.xsl">
      <param1>HogeHoge</param1>
    </XslFile>
  </ItemGroup>
  <Target Name="XsltSample">
    <Xslt Inputs="@(XmlFiles)" RootTag="PAGE" Xsl="@(XslFile)" Output="$(MSBuildProjectDirectory)\Result.html" />
  </Target>