これもハマったので書いてみる。
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>