如何从SSIS检查XML节点是否为空?

时间:2016-08-19 15:11:16

标签: xml xslt xpath ssis xquery

我有一个SSIS包,它使用XSLT处理一些XML,结果是一个CSV文件,但有时XML的某些节点是空的,我需要阻止创建一个空的CSV。

是否可以在XSLT Process任务之前验证XML?

我正在考虑XPath验证,但我不知道该怎么做。

1 个答案:

答案 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>&#xA;</xsl:text></xsl:otherwise>
            </xsl:choose>
        </xsl:for-each>
    </xsl:if>
</xsl:template>

请注意字符串长度上的节点测试。

输出:

foo,32,blah