我正在解析TSV文件并仅使用少量列值。 如果某些列值为NULL,则XSLT不会识别它们并改为计算下一列。
如果我用一些数据更改NULL值,则XSLT正常工作。
有人可以帮忙吗?
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:output method="xml" indent="yes"/>
<xsl:param name="identifier"/>
<xsl:param name="csvData"/>
<xsl:template match="/">
<xsl:variable name="csv" select="$csvData"/>
<xsl:variable name="data">
<data>
<xsl:analyze-string select="$csv" regex="\n">
<xsl:non-matching-substring>
<row>
<xsl:analyze-string select="." regex="\t" flags="x">
<xsl:non-matching-substring>
<col>
<xsl:value-of select="normalize-space(.)"/>
</col>
</xsl:non-matching-substring>
</xsl:analyze-string>
</row>
</xsl:non-matching-substring>
</xsl:analyze-string>
</data>
</xsl:variable>
<xsl:result-document>
<Events>
<xsl:for-each select="$data//row">
<Attendance>
<RetID><xsl:value-of select="../$identifier"/></RetID>
<AccountId><xsl:value-of select="col[1]"/></AccountId>
<EventId><xsl:value-of select="col[2]"/></EventId>
<EventName><xsl:value-of select="col[3]"/></EventName>
<EventDate><xsl:value-of select="col[4]"/></EventDate>
<EventTime><xsl:value-of select="col[5]"/></EventTime>
</Attendance>
</xsl:for-each>
</Events>
</xsl:result-document>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:1)
假设&#34; NULL&#34;选项卡分隔数据中的值由两个连续的制表符表示,然后我建议替换
<xsl:analyze-string select="." regex="\t" flags="x">
<xsl:non-matching-substring>
<col>
<xsl:value-of select="normalize-space(.)"/>
</col>
</xsl:non-matching-substring>
</xsl:analyze-string>
与
<xsl:for-each select="tokenize(., '\t')">
<col>
<xsl:value-of select="normalize-space(.)"/>
</col>
</xsl:analyze-string>