0

我的任务是测试一些 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)); 

但在那之后我不知道会发生什么。

如果有人可以就此分享一些信息,我将不胜感激。

4

1 回答 1

0

问题是我的模板不匹配,我在前 1000 次查看它时没有注意到。走了一会儿,回来阅读 Dimitre Novatchev 的评论后,我发现了问题。

于 2012-07-06T20:51:02.370 回答