Member 10227969 Ответов: 2

Пропуск тега строки (пустое имя тега строки) не может быть использован с атрибутивно-ориентированной сериализацией XML


Я попытался сформировать XML файл с помощью таблицы БД

обращенный к моей нужде.. но я должен изменить небольшое изменение, которое я не знаю, как решить

Это мое кодирование

select (Select  cast(service_ID as nvarchar)
       +cast(Year(Convert(datetime,date,103))as nvarchar)
       +Substring(date,Charindex('/',date)+1,2)
        +Substring(date,Charindex('/',date)-2,2)
--      +cast(datepart(dd,Convert(datetime,date,103))as nvarchar)
       +'E'
       +cast((DENSE_RANK()  OVER (PARTITION BY date  ORDER BY  frmtime ASC))as nvarchar)) as EVENTID,

        (select (convert(nvarchar,(convert(datetime,date,111)),111)) as DATE ,frmtime as TIME
         FOR XML PATH(''),TYPE, ELEMENTS)as START,

        (select (convert(nvarchar,(CONVERT(DATETIME,totime,108)- CONVERT(DATETIME,frmtime,108)),108))
        FOR XML PATH('DURATION'),TYPE, ELEMENTS),

        (select 'Eng' as '@Language', program as NAME,synopsis as SYNOPSIS,synopsis as LOG_LINE
        FOR XML PATH('EPG'),TYPE, ELEMENTS)as EPG_SECTION,

        (select 1 for xml path('THEME'),type,elements),

        (select 'IND' as '@Country' ,0 for xml path('RATING'),TYPE,ELEMENTS)

        from prg_detail as EVENTSECTION where service_ID=101  FOR XML AUTO, ELEMENTS





я получил выход поставленный вот так

<EVENTSECTION>
  <EVENTID>10120140206E1</EVENTID>
  <START>
    <DATE>2014/06/02</DATE>
    <TIME>00:00:00</TIME>
  </START>
  <DURATION>01:30:00</DURATION>
  <EPG_SECTION>
    <EPG Language="Eng">
      <NAME>Movie Contd</NAME>
      <SYNOPSIS>Movie Contd</SYNOPSIS>
      <LOG_LINE>Movie Contd</LOG_LINE>
    </EPG>
  </EPG_SECTION>
  <THEME>1</THEME>
  <RATING Country="IND">0</RATING>
</EVENTSECTION>




Но мне нужно, чтобы epg_section начался до истечения срока действия
Когда я попытался изменить, я получил такую ошибку: "пропуск тега строки (пустое имя тега строки) не может быть использован с атрибутивно-ориентированной сериализацией XML"

ie: требуемый выход-это

<EVENT_SECTION>
    <EVENTID>47920140220E1</EVENTID>
    <START>
      <DATE>2014/02/20</DATE>
      <TIME>00:00:00</TIME>
    </START>
    <EPG_SECTION>
      <DURATION>00:30:00</DURATION>
      <EPG Language="Eng">
        <NAME>Comedy Express</NAME>
        <SYNOPSIS>The program features a compilation of comic scenes from popular films.</SYNOPSIS>
        <LOG_LINE>Comedy Express</LOG_LINE>
      </EPG>
      <THEME>1</THEME>
      <RATING Country="IND">0</RATING>
    </EPG_SECTION>
  </EVENT_SECTION>

2 Ответов

Рейтинг:
1

Thava Rajan

select (Select  cast(service_ID as nvarchar)
       +cast(Year(Convert(datetime,date,103))as nvarchar)
       +Substring(date,Charindex('/',date)+1,2)
        +Substring(date,Charindex('/',date)-2,2)
--      +cast(datepart(dd,Convert(datetime,date,103))as nvarchar)
       +'E'
       +cast((DENSE_RANK()  OVER (PARTITION BY date  ORDER BY  frmtime ASC))as nvarchar)) as EVENTID,

        (select (convert(nvarchar,(convert(datetime,date,111)),111)) as DATE ,frmtime as TIME
         FOR XML PATH(''),TYPE, ELEMENTS)as START,

        (select 'Eng' as '@Language', 
/************ This is where i add my code******************/
(convert(nvarchar,(CONVERT(DATETIME,totime,108)- CONVERT(DATETIME,frmtime,108)),108)) as DURATION,
/************ i didn't know whether the braces are right before execute it check it ******************/
program as NAME,synopsis as SYNOPSIS,synopsis as LOG_LINE
        FOR XML PATH('EPG'),TYPE, ELEMENTS)as EPG_SECTION,

        (select 1 for xml path('THEME'),type,elements),

        (select 'IND' as '@Country' ,0 for xml path('RATING'),TYPE,ELEMENTS)

        from prg_detail as EVENTSECTION where service_ID=101  FOR XML AUTO, ELEMENTS


Member 10227969

Спасибо за УР анализировать, но когда я пытаюсь УР длительность запроса поплавок ниже в разделе ЕПГ

но нужно

секция epg
продолжительность
язык epg "eng"
имя
краткий обзор
логлайн

Рейтинг:
1

Always_Learning

Вы можете использовать типы данных [дата] и [время] в определении таблицы, чтобы несколько упростить математику, но следующий SQL даст вам XML, который вы ищете...

/*
if object_id(N'prg_detail') is not null drop table prg_detail;
create table dbo.prg_detail (
	[Service_ID] int,
	[Date] nvarchar(10),
	[FrmTime] nvarchar(8),
	[ToTime]  nvarchar(8),
	[Program] nvarchar(100),
	[Synopsis] nvarchar(100)
);
insert dbo.prg_detail
	select	[Service_ID] = 479,
		[Date] = N'20/02/2014',
		[FrmTime] = N'00:00:00',
		[ToTime] = N'00:30:00',
		[Program] = N'Comedy Express',
		[Synopsis] = N'The program features a compilation of comic scenes from popular films.' + nchar(13) + nchar(10);
*/
select	(select	cast(Service_ID as nvarchar)
		+ cast(year(convert(datetime, [Date], 103)) as nvarchar)
		+ substring([Date], charindex('/', [Date]) + 1, 2)
		+ substring([Date], charindex('/', [Date]) - 2, 2)
		+ 'E'
		+ cast((dense_rank() over (partition by [Date] order by FrmTime asc)) as nvarchar)) as [EVENTID],

	(convert(nvarchar, (convert(datetime, [Date], 103)), 111)) as [START/DATE],

	FrmTime as [START/TIME],

	(convert(nvarchar, (convert(datetime, ToTime, 108) - convert(datetime, FrmTime, 108)), 108)) as [EPG_SECTION/DURATION],

	(select	'Eng' as '@Language',
		program as NAME,
		synopsis as SYNOPSIS,
		program as LOG_LINE
	for xml path('EPG'),type, elements) as [EPG_SECTION],

	1 as [EPG_SECTION/THEME],

	(select 'IND' as '@Country', 0
	for xml path('RATING'),type,elements) as [EPG_SECTION]
from prg_detail
for xml path('EVENTSECTION');
go

И вот результат...
<EVENTSECTION>
  <EVENTID>47920140220E1</EVENTID>
  <START>
    <DATE>2014/02/20</DATE>
    <TIME>00:00:00</TIME>
  </START>
  <EPG_SECTION>
    <DURATION>00:30:00</DURATION>
    <EPG Language="Eng">
      <NAME>Comedy Express</NAME>
      <SYNOPSIS>The program features a compilation of comic scenes from popular films.
</SYNOPSIS>
      <LOG_LINE>Comedy Express</LOG_LINE>
    </EPG>
    <THEME>1</THEME>
    <RATING Country="IND">0</RATING>
  </EPG_SECTION>
</EVENTSECTION>