2012-07-06 58 views
0

我的任務是測試一些XSLT代碼以確保它正在輸出我們需要的內容。問題是列數據出現,但實際數據本身消失。由於我從來沒有處理過XSLT或csv文件,因此我對這種情況發生的原因感到茫然。這裏是XSLT:XSLT:列名出現在csv文件中,但數據空白

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

請提供一個完整(但儘可能小)的XML文檔,其中轉換會產生不需要的結果。還提供確切的想要的結果。很可能您嘗試轉換的XML文檔具有不同的結構,並且不符合轉換期望爲真的先決條件。因此,原因在於您沒有向我們顯示的文件。 – 2012-07-06 20:05:34

+0

@DimitreNovatchev - 感謝您的幫助。您的評論讓我回過頭來看看所有內容,發現我的XSLT模板中有一個不匹配的匹配,但我沒有注意到。 – 2012-07-06 20:48:59

+0

很高興現在我的評論是有幫助的。 – 2012-07-06 21:45:44

回答

0

問題在於我的模板不匹配,我沒有注意到我看到它的前1000次。走了一會兒,回來讀Dimitre Novatchev的評論,我發現了這個問題。