SSIS XML源标记元素截断错误

时间:2013-12-23 12:34:17

标签: sql-server xml ssis xsd

我从XML中粘贴了以下需要在SSIS中处理的XML元素:

<Contact>
  <Mail>testmail@testtesttestte.com                                                                                                                                                                                                                                    </Mail>
</Contact>

此XML for Mail元素的基础XSD架构为:

            <xs:element name="Mail">
            <xs:annotation>
                <xs:documentation>e-mail address</xs:documentation>
            </xs:annotation>
            <xs:simpleType>
                <xs:restriction base="xs:token">
                    <xs:maxLength value="250"/>
                    <xs:minLength value="1"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:element>

当SSIS包尝试处理此XML时,它会给出一个错误,即超出了此元素的最大大小。这是因为Mail元素有255个字符(带有空格)。 根据这个:http://www.schemacentral.com/sc/xsd/t-xsd_token.html “每组连续的空格都折叠成一个空格字符,并删除所有前导和尾随空格”

如何让SSIS了解这一点并且不会出错并能够处理XML?

1 个答案:

答案 0 :(得分:0)

我不知道如何让SSIS做你想做的事,但我可以提供一个解决方法,如果你想尝试一下:使用执行SQL任务,将XML作为varchar变量传递给任务,转换它在SQL中使用XML,然后手动替换“Mail”元素文本,删除空格,并将其传递回包变量。下面是一些示例T-SQL,您可以将其粘贴到管理工作室,以了解它是如何工作的。

DECLARE @mail VARCHAR(255), @xml XML = 
'<Contact>
  <Mail>testmail@testtesttestte.com                                                                                                                                                                                                                                    </Mail>
</Contact>';

SELECT  @mail = RTRIM(a.n.value('Mail[1]','varchar(max)'))
FROM    @xml.nodes('/Contact') AS a(n);

SET @xml.modify('replace value of (/Contact/Mail/text())[1] with sql:variable("@mail")')

SELECT @xml;