我的任务是测试一些 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));
但在那之后我不知道会发生什么。
如果有人可以就此分享一些信息,我将不胜感激。