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));
但在那之後,我不知道會發生什麼。
如果任何人都可以分享這一點,我會很感激。
請提供一個完整(但儘可能小)的XML文檔,其中轉換會產生不需要的結果。還提供確切的想要的結果。很可能您嘗試轉換的XML文檔具有不同的結構,並且不符合轉換期望爲真的先決條件。因此,原因在於您沒有向我們顯示的文件。 – 2012-07-06 20:05:34
@DimitreNovatchev - 感謝您的幫助。您的評論讓我回過頭來看看所有內容,發現我的XSLT模板中有一個不匹配的匹配,但我沒有注意到。 – 2012-07-06 20:48:59
很高興現在我的評論是有幫助的。 – 2012-07-06 21:45:44