XSLT:列名出现在csv文件中,但数据为空

时间:2012-07-06 19:24:37

标签: c# unit-testing xslt

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

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

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

1 个答案:

答案 0 :(得分:0)

问题是我的模板不匹配,我没注意到我看过它的前1000次。走开了一会儿,回来看Dimitre Novatchev的评论我发现了问题。