私は、XSLT コードをテストして、必要なものが出力されていることを確認する任務を負っています。問題は、列データは表示されますが、実際のデータ自体が表示されないことです。これまで XSLT ファイルや csv ファイルを扱ったことがないので、なぜこれが起こっているのかわかりません。XSLT は次のとおりです。
public const string XSLT = @"
<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform""
xmlns:msxsl=""urn:schemas-microsoft-com:xslt"" exclude-result-prefixes=""msxsl"">
<xsl:output method=""text"" encoding=""us-ascii"" />
<xsl:template match=""DataRow"">IncidentNumber,IncidentDate,LocationCode,Location,DateReported,DaysFromWork,OSHAReportable, TotalDaysFromWork,InjuredEmployeeName,EmployeeType,ReportedBy,Witness,ThisIncidentIs,InjuryOrIllnessType,Hospital, Recurring,CauseOfInjury,InjuryType,BodyPartInjured,BodyFluid,AECIPremises,
<xsl:apply-templates select=""Derate""/>
</xsl:template>
<xsl:template match=""Data"">
<xsl:for-each select=""*"">
<xsl:if test=""position() != last()"">
<xsl:text>'</xsl:text>
<xsl:value-of disable-output-escaping=""yes"" select="".""/>
<xsl:text>'</xsl:text>
<xsl:value-of select=""','""/>
</xsl:if>
<xsl:if test=""position() = last()"">
<xsl:text>'</xsl:text>
<xsl:value-of disable-output-escaping=""yes"" select="".""/>
<xsl:text>'</xsl:text>
</xsl:if>
</xsl:for-each>,
</xsl:template>
</xsl:stylesheet>
";
これが私のテスト方法です:
[TestMethod]
[DeploymentItem("app.config")]
public void OneDayTest()
{
var target = new Harvester();
var config = ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap
{ ExeConfigFilename = @"app.config" }, ConfigurationUserLevel.None);
target.ConfigureHarvester(config);
var results = target.Harvest(new HarvestTargetTimeRangeUTC{StartTimeUTC = new DateTime(2012, 1, 1).ToUniversalTime(),
EndTimeUTC = DateTime.Now.ToUniversalTime()});
XmlSchemaSet set = new XmlSchemaSet();
set.Add(XmlSchema.Read(XElement.Parse(Constants.Xsd).CreateReader(), (o, e) => { }));
bool valid = true;
(new XDocument(results)).Validate(set, (o, e) =>
{
valid = false;
});
Assert.IsTrue(valid);
XslCompiledTransform transformer = new XslCompiledTransform();
transformer.Load(XElement.Parse(Constants.XSLT).CreateReader());
var stream = new MemoryStream();
transformer.Transform(results.CreateReader(), null, new StreamWriter(stream));
stream.Position = 0;
File.WriteAllBytes("UnsubmittedWorkmansCompIncidentsReportID.csv", stream.ToArray());
}
XSLT とテスト メソッドの両方で、定義済みの会社の形式を使用しています。実際に行ったのは、データに合わせて微調整することだけでした。他のものでは問題なく動作するので、なぜここで動作しないのかわかりません。
デバッグすると、データは次の行に表示されます。
transformer.Transform(results.CreateReader(), null, new StreamWriter(stream));
しかしその後はどうなるかわかりません。
誰かがこれについていくつかの光を共有できれば、私はそれを感謝します.