Sql server SSIS XML源令牌元素截断错误
我从需要在SSIS中处理的XML中粘贴了以下XML元素:Sql server SSIS XML源令牌元素截断错误,sql-server,xml,ssis,xsd,Sql Server,Xml,Ssis,Xsd,我从需要在SSIS中处理的XML中粘贴了以下XML元素: <Contact> <Mail>testmail@testtesttestte.com
<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个带空格的字符。
根据这一点:每组连续的空格被压缩成一个空格字符,所有的前导空格和尾随空格都被删除
我怎样才能让SSI意识到这一点而不给出错误并能够处理XML?我不知道如何让SSI做您想要做的事情,但如果您想尝试,我可以提供一种解决方法:使用执行SQL任务,将XML作为varchar变量传递到任务中,在SQL中将其转换为XML,然后手动替换邮件元素文本,删除空格,并将其传递回包变量。下面是一些示例T-SQL,您可以将其粘贴到ManagementStudio中,看看它是如何工作的
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;
谢谢你的回答。我想使用SSI的原因不是为了修改或处理XML,因为我需要处理的XML是10GB+。我希望SSI能够完全读取并能够像XSD中描述的那样解析XML,但显然它不处理令牌类型元素。