June 20, 2016 at 12:15 am
Hi All,
I'm trying to build XSL FO for PDF creation using FOP.NET. For that i need to generate XML in the below way to easily map my XML to the XSLT XSL FO. Below is the desired format that i specifically require and not able to build it properly. I'm posting my Query along with the desired o/p, can anyone please help me on this?
SELECT (SELECT u.Name, ul.UsrName, lo.Remark, lo.UsrIPAddress, lo.CreatedDate, lo.AppID, lo.AppVersion, ul.[UsrLastLoginDate]
FOR XML PATH('Columns'), TYPE)
FROM BOS_LoginType AS bo
INNER JOIN LOG_UsrAccess AS lo
INNER JOIN usrlist ul ON ul.UsrID=lo.UsrID
INNER JOIN MstPrivateDtl u on u.TypeValue= lo.UsrID AND u.Type='U'
ON CONVERT(INT, bo.Id) & lo.LogType <> 0 AND bo.Description='Login'
GROUP BY u.Name,ul.UsrName,lo.Remark,lo.UsrIPAddress, lo.CreatedDate, lo.AppID, lo.AppVersion, ul.[UsrLastLoginDate]
FOR XML RAW('ColumnHeader'), ROOT ('ReportData'), ELEMENTS;
Desired output format:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ReportData>
<ColumnHeaders>
<ColumnHeader>
<Name>Col-Header1</Name>
</ColumnHeader>
<ColumnHeader>
<Name>Col-Header2</Name>
</ColumnHeader>
<ColumnHeader>
<Name>Col-Header3</Name>
</ColumnHeader>
</ColumnHeaders>
<Rows>
<Row>
<Column>Row1-Col1</Column>
<Column>Row1-Col2</Column>
<Column>Row1-Col3</Column>
</Row>
<Row>
<Column>Row2-Col1</Column>
<Column>Row2-Col2</Column>
<Column>Row2-Col3</Column>
</Row>
</Rows>
</ReportData>
Thanks,
Pavan
June 20, 2016 at 2:24 am
Can you post the structure of the tables used in query along with some sample data to help you better?
June 20, 2016 at 2:57 am
Hi,
Thanks for the reply, I cannot provide the table schema due to some VM problems here. Can you please join 2 tables with sample data to get results in the above format? Waiting for your reply..
Thanks,
PAvan
June 20, 2016 at 3:51 am
Headers should be created manually.
WITH t AS ( -- sample data
SELECT 1 AS a
, 2 AS b
, 3 AS c
, 4 AS d
, NULL AS z
UNION ALL
SELECT 10 AS a
, 20 AS b
, 30 AS c
, 40 AS d
, 100 AS z
)
SELECT
(SELECT cn AS [ColumnHeader/Name]
FROM (
-- create headers by hand
VALUES ( 'a' )
, ( 'b' )
, ( 'c' )
, ( 'd' )
, ( 'z' )
) headres(cn)
FOR XML path(''),Type) AS [ColumnHeaders] ,
(SELECT
(SELECT a AS [Column] FOR XML path(''),Type),
(SELECT b AS [Column] FOR XML path(''),Type),
(SELECT c AS [Column] FOR XML path(''),Type),
(SELECT d AS [Column] FOR XML path(''),Type),
-- mind nullable columns
(SELECT z AS [Column] FOR XML path(''),elements xsinil,Type)
FROM t
FOR XML path('Row'),Type) AS [Rows]
FOR XML path('ReportData'),Type
June 20, 2016 at 4:05 am
The above solution works, I've replaced the sample data with my own query to get the desired result.. I actually want to construct XSL FO with this XML and create dynamic columns in the FO stylesheet..
Many thanks for your help..
Thanks,
June 23, 2016 at 12:28 am
Hi,
How can i get null row values in the below format? When i tried, I'm not getting the NULL value rows in the XML, they are being sipped.. I need the output like below..
<ReportData>
<Reports>
<Name>123</Name>
<IPAddress>0.0.0.0</IPAddress>
<DateCreated>2016-02-24T18:32:11.803</DateCreated>
<ID>OS</ID>
<Version>0.0.3.0</Version>
<LastLoggedin>2016-06-23T14:12:49.043</LastLoggedin>
</Reports>
<Reports>
<Name>123</Name>
<IPAddress>0.0.0.0</IPAddress>
<DateCreated>2016-02-24T18:32:11.803</DateCreated>
<ID>OS</ID>
<Version>0.0.3.0</Version>
<LastLoggedin>2016-06-23T14:12:49.043</LastLoggedin>
</Reports>
</ReportData>
June 23, 2016 at 1:53 am
You may force generation XML elements for NULL values with the XSINIL parameter https://msdn.microsoft.com/en-us/library/ms178079.aspx
WITH XMLNAMESPACES('http://www.w3.org/2001/XMLSchema-instance' as xsi)
SELECT a,z
FROM ( -- sample data
SELECT 1 AS a, NULL AS z
UNION ALL
SELECT 10 AS a, 100 AS z
) t
FOR XML PATH('report'), ELEMENTS XSINIL, TYPE;
WITH XMLNAMESPACES is optional, just to move xlmns:xsi="http://www.w3.org/2001/XMLSchema-instance" declaration to the document element.
June 23, 2016 at 5:35 pm
maruthipuligandla (6/23/2016)
Hi,How can i get null row values in the below format? When i tried, I'm not getting the NULL value rows in the XML, they are being sipped.. I need the output like below..
<ReportData>
<Reports>
<Name>123</Name>
<IPAddress>0.0.0.0</IPAddress>
<DateCreated>2016-02-24T18:32:11.803</DateCreated>
<ID>OS</ID>
<Version>0.0.3.0</Version>
<LastLoggedin>2016-06-23T14:12:49.043</LastLoggedin>
</Reports>
<Reports>
<Name>123</Name>
<IPAddress>0.0.0.0</IPAddress>
<DateCreated>2016-02-24T18:32:11.803</DateCreated>
<ID>OS</ID>
<Version>0.0.3.0</Version>
<LastLoggedin>2016-06-23T14:12:49.043</LastLoggedin>
</Reports>
</ReportData>
Which values in this example represent NULL's?
_____________
Code for TallyGenerator
June 29, 2016 at 9:36 pm
Hi,
How can i get the below format, I need to add a Header, Footer to the existing XML .
<Reports>
<Header>
<PrintedDate>23/01/2001</PrintedDate>
<PrintedBy>XYZ </PrintedBy>
</Header>
<Footer>
<DocumentPreparedBy>ABC</DocumentPreparedBy>
</Footer>
<Report>
<Name>123</Name>
<UserName></UserName>
<Remarks></Remarks>
<IPAddress>0.0.0.0</IPAddress>
<DateCreated>2016-02-24T18:32:11.803</DateCreated>
<AppID>BOS</AppID>
<AppVersion>0.0.3.0</AppVersion>
<LastLoggedin>2016-06-23T16:04:07.167</LastLoggedin>
</Report>
</Reports>
June 29, 2016 at 11:04 pm
This quick suggestion should get you started
😎
USE tempdb;
SET NOCOUNT ON;
;WITH SAMPLE_DATA(PrintedDate,PrintedBy,DocumentPreparedBy,Name,UserName,Remarks,IPAddress,DateCreated,AppID,AppVersion,LastLoggedin) AS
(SELECT * FROM
(VALUES
(
CONVERT(DATE,'20010123',112)
,'XYZ'
,'ABC'
,'123'
,''
,''
,'0.0.0.0'
,CONVERT(DATETIME,'20160224 18:32:11.803',112)
,'BOS'
,'0.0.3.0'
,CONVERT(DATETIME,'20160623 16:04:07.167',112)
)
) AS X(PrintedDate,PrintedBy,DocumentPreparedBy,Name,UserName,Remarks,IPAddress,DateCreated,AppID,AppVersion,LastLoggedin))
SELECT
SD.PrintedDate AS 'Header/PrintedDate'
,SD.PrintedBy AS 'Header/PrintedBy'
,SD.DocumentPreparedBy AS 'Footer/DocumentPreparedBy'
,SD.Name AS 'Report/Name'
,SD.UserName AS 'Report/UserName'
,SD.Remarks AS 'Report/Remarks'
,SD.IPAddress AS 'Report/IPAddress'
,SD.DateCreated AS 'Report/DateCreated'
,SD.AppID AS 'Report/AppID'
,SD.AppVersion AS 'Report/AppVersion'
,SD.LastLoggedin AS 'Report/LastLoggedin'
FROM SAMPLE_DATA SD
FOR XML PATH(''),ROOT('Reports');
Output
<Reports>
<Header>
<PrintedDate>2001-01-23</PrintedDate>
<PrintedBy>XYZ</PrintedBy>
</Header>
<Footer>
<DocumentPreparedBy>ABC</DocumentPreparedBy>
</Footer>
<Report>
<Name>123</Name>
<UserName></UserName>
<Remarks></Remarks>
<IPAddress>0.0.0.0</IPAddress>
<DateCreated>2016-02-24T18:32:11.803</DateCreated>
<AppID>BOS</AppID>
<AppVersion>0.0.3.0</AppVersion>
<LastLoggedin>2016-06-23T16:04:07.167</LastLoggedin>
</Report>
</Reports>
June 30, 2016 at 12:07 am
Hi,
When i executed this with my query, It is giving me the following output:
<Reports>
<Report>
<Header>
<PrintedDate></PrintedDate>
<PrintedBy></PrintedBy>
</Header>
<Footer>
<DocumentPreparedBy></DocumentPreparedBy>
</Footer>
<Report>
<Name>CECILIA</Name>
<UserName></UserName>
<Remarks></Remarks>
<IPAddress>121.121.15.250</IPAddress>
<DateCreated>2016-05-20T11:15:05.420</DateCreated>
<AppID>BOS</AppID>
<AppVersion>0.0.7.0</AppVersion>
<LastLoggedin>2016-06-30T11:49:01.053</LastLoggedin>
</Report>
</Report>
<Report>
<Header>
<PrintedDate></PrintedDate>
<PrintedBy></PrintedBy>
</Header>
<Footer>
<DocumentPreparedBy></DocumentPreparedBy>
</Footer>
<Report>
<Name>CECILIA</Name>
<UserName></UserName>
<Remarks></Remarks>
<IPAddress>121.121.15.250</IPAddress>
<DateCreated>2016-06-01T11:43:19.480</DateCreated>
<AppID>BOS</AppID>
<AppVersion>0.0.7.0</AppVersion>
<LastLoggedin>2016-06-30T11:49:01.053</LastLoggedin>
</Report>
</Report>
</Reports>
DO you want me to post my query? PLease let me know
June 30, 2016 at 8:53 pm
Hi,
If i've multiple rows, then Header and Footer values are repeating for each Report row. I dont want to repeat them, I just need them as seperate attributes.
July 1, 2016 at 2:41 am
maruthipuligandla (6/30/2016)
Hi,If i've multiple rows, then Header and Footer values are repeating for each Report row. I dont want to repeat them, I just need them as seperate attributes.
Here is a quick solution
😎
USE tempdb;
SET NOCOUNT ON;
;WITH SAMPLE_DATA(Name,UserName,Remarks,IPAddress,DateCreated,AppID,AppVersion,LastLoggedin) AS
(SELECT * FROM
(VALUES
(
'123'
,''
,''
,'0.0.0.0'
,CONVERT(DATETIME,'20160224 18:32:11.803',112)
,'BOS'
,'0.0.3.0'
,CONVERT(DATETIME,'20160623 16:04:07.167',112)
)
,(
'223'
,''
,''
,'0.0.0.0'
,CONVERT(DATETIME,'20160224 12:32:11.803',112)
,'BOS'
,'0.0.4.0'
,CONVERT(DATETIME,'20160923 16:04:07.167',112)
)
) AS X(Name,UserName,Remarks,IPAddress,DateCreated,AppID,AppVersion,LastLoggedin))
,SAMPLE_HEADER_FOOTER(PrintedDate,PrintedBy,DocumentPreparedBy) AS
(SELECT * FROM
(VALUES
(
CONVERT(DATE,'20010123',112)
,'XYZ'
,'ABC'
)
) AS X(PrintedDate,PrintedBy,DocumentPreparedByn))
SELECT
SHF.PrintedDate AS 'Header/PrintedDate'
,SHF.PrintedBy AS 'Header/PrintedBy'
,SHF.DocumentPreparedBy AS 'Footer/DocumentPreparedBy'
,(SELECT
SD.Name AS 'Report/Name'
,SD.UserName AS 'Report/UserName'
,SD.Remarks AS 'Report/Remarks'
,SD.IPAddress AS 'Report/IPAddress'
,SD.DateCreated AS 'Report/DateCreated'
,SD.AppID AS 'Report/AppID'
,SD.AppVersion AS 'Report/AppVersion'
,SD.LastLoggedin AS 'Report/LastLoggedin'
FROM SAMPLE_DATA SD
FOR XML PATH(''),TYPE)
FROM SAMPLE_HEADER_FOOTER SHF
FOR XML PATH(''),ROOT('Reports');
;
Output
<Reports>
<Header>
<PrintedDate>2001-01-23</PrintedDate>
<PrintedBy>XYZ</PrintedBy>
</Header>
<Footer>
<DocumentPreparedBy>ABC</DocumentPreparedBy>
</Footer>
<Report>
<Name>123</Name>
<UserName />
<Remarks />
<IPAddress>0.0.0.0</IPAddress>
<DateCreated>2016-02-24T18:32:11.803</DateCreated>
<AppID>BOS</AppID>
<AppVersion>0.0.3.0</AppVersion>
<LastLoggedin>2016-06-23T16:04:07.167</LastLoggedin>
</Report>
<Report>
<Name>223</Name>
<UserName />
<Remarks />
<IPAddress>0.0.0.0</IPAddress>
<DateCreated>2016-02-24T12:32:11.803</DateCreated>
<AppID>BOS</AppID>
<AppVersion>0.0.4.0</AppVersion>
<LastLoggedin>2016-09-23T16:04:07.167</LastLoggedin>
</Report>
</Reports>
November 5, 2023 at 2:41 am
This was removed by the editor as SPAM
Viewing 14 posts - 1 through 13 (of 13 total)
You must be logged in to reply to this topic. Login to reply