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 に答える