我有一个SSIS包,它使用XSLT处理一些XML,结果是一个CSV文件,但有时XML的某些节点是空的,我需要阻止创建一个空的CSV。
是否可以在XSLT Process任务之前验证XML?
我正在考虑XPath验证,但我不知道该怎么做。
答案 0 :(得分:0)
如果通过验证表示检查节点实际上是否包含要提取的文本,那么最简单的验证是对字符串长度的节点测试。您可以在实际转换为CSV期间执行此操作,因此您只需跳过部分填充的行。
我不知道您的XML源是什么,但给定了这样的输入结构:
<test.to.csv>
<item>
<a>foo</a>
<b>32</b>
<c>blah</c>
</item>
<item>
<a>foo</a>
<b>33</b>
<c/>
</item>
</test.to.csv>
...那么像这样的模板规则就足够了:
<xsl:template match="item">
<xsl:if test="a[text()] and b[text()] and c[text()]">
<xsl:for-each select="*">
<xsl:value-of select="." />
<xsl:choose>
<xsl:when test="position() lt last()"><xsl:text>,</xsl:text></xsl:when>
<xsl:otherwise><xsl:text>
</xsl:text></xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:if>
</xsl:template>
请注意字符串长度上的节点测试。
输出:
foo,32,blah