我从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?
答案 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;