2013-12-23 27 views
0

我从一个XML粘贴以下XML元素,我需要在SSIS处理:SSIS XML源标记元素截断误差

<Contact> 
    <Mail>[email protected]                                                         </Mail> 
</Contact> 

这个XML邮件元素的下属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

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

DECLARE @mail VARCHAR(255), @xml XML = 
'<Contact> 
    <Mail>[email protected]                                                         </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; 
+0

谢谢你的回答。我想使用SSIS的原因不是改变或处理XML,因为我需要处理的XML是10GB +。我希望SSIS完全阅读并能够解析XSD中描述的XML,但显然它不处理令牌类型元素。 – EIZ