[英]SSIS issuse with creating XML file
您能告诉我第一行中带有Tile的XML文件的最佳方法是:
<?xml version="1.0" encoding="ISO-8859-15" ?>
然后是数据行?
我正在使用的SQL查询在本文的结尾。
SSIS是这样的:
我猜在SQL中,当我注释这两行时,SQL运行并将输出转换为XML:
depgate as DepartingGate,
arrgate as ArrivalGate,
如果我不对以上各行发表评论,则会出现错误。 我收到的错误消息是:
消息9420,级别16,状态1,第4行XML解析:第1行,字符439,非法xml字符。
我尝试限制&
和-
等,但是没有用。
我看到了该表,其中包含XML的一些非法字符,但是我不确定如何限制这些字符。 您能告诉我什么是一个好的解决方案吗?
DECLARE @XmlOutput XML
set @XmlOutput = (
select
sched_local_fltdate as FlightDate,
flt_num as FlightNumber,
Dep as Origin,
Arr as Destination,
ltrim(rtrim(substring(ac, 2, 10))) as AccountNumber,
ac as RegisttrationNumber,
actype,
CASE WHEN cancelled = 'Y' then 'Cancelled'
when flight_type = 'S' then 'Scheduled'
when flight_type = 'O' then 'Spare Block'
when flight_type = 'C' then 'Charter'
when flight_type = 'F' then 'Ferry'
when flight_type = 'M' then 'Military'
when flight_type = 'SR' then 'Re-route'
when flight_type = 'X' then 'Maintenance Block'
else LTRIM(RTRIM(flight_type))
end as FlightTypeDescription,
case when cancelled = 'Y' then 'Cancelled'
when VPART_BLON > 0 then 'Arrived'
when flight_type in ('O','X') then 'No Flight'
end as FlightStatusDescription,
out_utc as OutUTMS,
in_utc as InUTMS,
depgate as DepartingGate,
arrgate as ArrivalGate,
departure_fuel_lbs as DepartureFuelLBS,
arrival_fuel_lbs as ArrivalFuelLBS,
'N/A' as FuelUnitOfMSRName
from [dbo].[ufn_Get_Flight_Operations_Base_Dataset] (cast(dateadd(day, -2, getdate()) as date), cast(getdate() as date), DEFAULT, DEFAULT, DEFAULT)
for xml Path('row'), elements)
Select @XmlOutput as XMLValue
您可以编写一个相当简单的编码函数来转义XML繁琐的5个字符,然后通过该函数运行这些字段。 或使用链接调用来替换。 XML使用者需要正确处理转义的字符。
这是我们前一段时间为大型客户中的一个客户转义大型XML文档中的敏感字符而做的。
CREATE FUNCTION dbo.uf_XmlEncode (@as_input NVARCHAR(4000))
RETURNS NVARCHAR(4000)
WITH EXECUTE AS CALLER
AS
BEGIN
DECLARE @ls_text NVARCHAR(4000)
SET @ls_text = @as_input
SELECT @ls_text = REPLACE( @ls_text , '&', '&' )
SELECT @ls_text = REPLACE( @ls_text , '''', ''')
SELECT @ls_text = REPLACE( @ls_text , '"', '"')
SELECT @ls_text = REPLACE( @ls_text , '>', '>' )
SELECT @ls_text = REPLACE( @ls_text , '<', '<' )
RETURN COALESCE (@ls_text, @as_input)
END
GO
解码是相反的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.