﻿<?xml version='1.0' encoding='UTF-8'?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>SQLServerCentral / Programming / XML  / Another XML to tabular question / Latest Posts</title><generator>InstantForum.NET v2.9.0</generator><description>SQLServerCentral</description><link>http://www.sqlservercentral.com/Forums/</link><webMaster>notifications@sqlservercentral.com</webMaster><lastBuildDate>Wed, 19 Jun 2013 13:06:30 GMT</lastBuildDate><ttl>20</ttl><item><title>RE: Another XML to tabular question</title><link>http://www.sqlservercentral.com/Forums/Topic1410398-21-1.aspx</link><description>[quote][b]hb21l6 (1/23/2013)[/b][hr]Thank you arthurolcot very very much! That did exactly what I was looking for.Many thanksDavid[/quote]No problem.. Thanks for the feedback.</description><pubDate>Wed, 23 Jan 2013 02:41:19 GMT</pubDate><dc:creator>arthurolcot</dc:creator></item><item><title>RE: Another XML to tabular question</title><link>http://www.sqlservercentral.com/Forums/Topic1410398-21-1.aspx</link><description>Thank you arthurolcot very very much! That did exactly what I was looking for.Many thanksDavid</description><pubDate>Wed, 23 Jan 2013 02:24:19 GMT</pubDate><dc:creator>hb21l6</dc:creator></item><item><title>RE: Another XML to tabular question</title><link>http://www.sqlservercentral.com/Forums/Topic1410398-21-1.aspx</link><description>Hi,I think you are very close, does this updated final query do what you need it to do or get you closer?[code="sql"]select     C.value('(Customers/CustomerID)[1]','INT') as CusID, 	C.value('(Customers/ContactName)[1]','varchar(50)') as ContactName, 	C.value('(Customers/Email)[1]','varchar(150)') as eml,	C.value('(Order/OrderNumber)[1]','INT') as OrderNo,	C.value('(Order/OrderDate)[1]','varchar(20)') as OrderDate,		i.value('(Description)[1]','varchar(120)') as ItemDesc,	i.value('(Price)[1]','money') as ItemPrice,	i.value('(ProductCode)[1]','INT') as ProdCode,	i.value('(ColourCodeId)[1]','varchar(120)') as ColCode,	i.value('(ColourCodeTitle)[1]','varchar(120)') as ColCodeTitle,	i.value('(Quantity)[1]','float(20)') as ItemQty	Into Tbl_NewTableName		fromxmlImportTestcross apply xml_data.nodes('/AsOrders/Cust') as Cust(C)CROSS APPLY C.nodes('OrderItems') AS Items(I)[/code]This returns three records, two for order 165237 and one for order 165236</description><pubDate>Wed, 23 Jan 2013 02:09:52 GMT</pubDate><dc:creator>arthurolcot</dc:creator></item><item><title>Another XML to tabular question</title><link>http://www.sqlservercentral.com/Forums/Topic1410398-21-1.aspx</link><description>Hello All, I'm having a bit of a problem getting my XML into a correct tabular format.Below, I have a Customer, order, orderItems XML file.When I write the results out in tabular format, its only taking one Order Item, and not all of them.Heres the data sample:[code="plain"]&amp;lt;?xml version="1.0" standalone="yes"?&amp;gt;&amp;lt;AsOrders&amp;gt;	&amp;lt;Cust Name='165237'&amp;gt;	&amp;lt;Customers&amp;gt;		&amp;lt;CustomerID&amp;gt;17335&amp;lt;/CustomerID&amp;gt;		&amp;lt;ContactName&amp;gt;Amy surname&amp;lt;/ContactName&amp;gt;		&amp;lt;Email&amp;gt;asurname@Email.com&amp;lt;/Email&amp;gt;	&amp;lt;/Customers&amp;gt;	&amp;lt;Order&amp;gt;		&amp;lt;OrderNumber&amp;gt;165237&amp;lt;/OrderNumber&amp;gt;		&amp;lt;OrderDate&amp;gt;14/01/2013 13:36:33&amp;lt;/OrderDate&amp;gt;	&amp;lt;/Order&amp;gt;	&amp;lt;OrderItems&amp;gt;		&amp;lt;Description&amp;gt;SALE - RED &amp;lt;/Description&amp;gt;		&amp;lt;Price&amp;gt;6.50&amp;lt;/Price&amp;gt;		&amp;lt;ProductCode&amp;gt;343&amp;lt;/ProductCode&amp;gt;		&amp;lt;ColourCodeId&amp;gt;N/A&amp;lt;/ColourCodeId&amp;gt;		&amp;lt;ColourCodeTitle&amp;gt;N/A&amp;lt;/ColourCodeTitle&amp;gt;		&amp;lt;Quantity&amp;gt;1&amp;lt;/Quantity&amp;gt;	&amp;lt;/OrderItems&amp;gt;           &amp;lt;OrderItems&amp;gt;		&amp;lt;Description&amp;gt;SALE - BLUE &amp;lt;/Description&amp;gt;		&amp;lt;Price&amp;gt;6.50&amp;lt;/Price&amp;gt;		&amp;lt;ProductCode&amp;gt;344&amp;lt;/ProductCode&amp;gt;		&amp;lt;ColourCodeId&amp;gt;N/A&amp;lt;/ColourCodeId&amp;gt;		&amp;lt;ColourCodeTitle&amp;gt;N/A&amp;lt;/ColourCodeTitle&amp;gt;		&amp;lt;Quantity&amp;gt;1&amp;lt;/Quantity&amp;gt;	&amp;lt;/OrderItems&amp;gt;	&amp;lt;/Cust&amp;gt;	           &amp;lt;Cust Name='165236'&amp;gt;	&amp;lt;Customers&amp;gt;		&amp;lt;CustomerID&amp;gt;16154&amp;lt;/CustomerID&amp;gt;		&amp;lt;ContactName&amp;gt;Loretta surname&amp;lt;/ContactName&amp;gt;		&amp;lt;Email&amp;gt;Lorettasurname@email.com&amp;lt;/Email&amp;gt;	&amp;lt;/Customers&amp;gt;	&amp;lt;Order&amp;gt;		&amp;lt;OrderNumber&amp;gt;165236&amp;lt;/OrderNumber&amp;gt;		&amp;lt;OrderDate&amp;gt;14/01/2013 13:23:57&amp;lt;/OrderDate&amp;gt;	&amp;lt;/Order&amp;gt;	&amp;lt;OrderItems&amp;gt;		&amp;lt;Description&amp;gt;SAL GREEN&amp;lt;/Description&amp;gt;		&amp;lt;Price&amp;gt;72.00&amp;lt;/Price&amp;gt;		&amp;lt;ProductCode&amp;gt;274&amp;lt;/ProductCode&amp;gt;		&amp;lt;ColourCodeId&amp;gt;N/A&amp;lt;/ColourCodeId&amp;gt;		&amp;lt;ColourCodeTitle&amp;gt;N/A&amp;lt;/ColourCodeTitle&amp;gt;		&amp;lt;Quantity&amp;gt;2&amp;lt;/Quantity&amp;gt;	&amp;lt;/OrderItems&amp;gt;	&amp;lt;/Cust&amp;gt;&amp;lt;/AsOrders&amp;gt;[/code]I can load the XML file into a #temp table [code="plain"]CREATE TABLE XmlImportTest(    xmlFileName VARCHAR(300),    xml_data xml)GODECLARE @xmlFileName VARCHAR(300)SELECT  @xmlFileName = 'E:\Orders.xml'-- dynamic sql is just so we can use @xmlFileName variable in OPENROWSETEXEC('INSERT INTO XmlImportTest(xmlFileName, xml_data)SELECT ''' + @xmlFileName + ''', xmlData FROM(    SELECT  *     FROM    OPENROWSET (BULK ''' + @xmlFileName + ''' , SINGLE_BLOB) AS XMLDATA) AS FileImport (XMLDATA)')GO[/code]Now read the data out of the XML field into a tabular format, and into a new table.( this is where the fault is, its only returning a sinlge order line, with a single item.[code="plain"]select     C.value('(Customers/CustomerID)[1]','INT') as CusID, 	C.value('(Customers/ContactName)[1]','varchar(50)') as ContactName, 	C.value('(Customers/Email)[1]','varchar(150)') as eml,	C.value('(Order/OrderNumber)[1]','INT') as OrderNo,	C.value('(Order/OrderDate)[1]','varchar(20)') as OrderDate,		C.value('(OrderItems/Description)[1]','varchar(120)') as ItemDesc,	C.value('(OrderItems/Price)[1]','money') as ItemPrice,	C.value('(OrderItems/ProductCode)[1]','INT') as ProdCode,	C.value('(OrderItems/ColourCodeId)[1]','varchar(120)') as ColCode,	C.value('(OrderItems/ColourCodeTitle)[1]','varchar(120)') as ColCodeTitle,	C.value('(OrderItems/Quantity)[1]','float(20)') as ItemQty	Into Tbl_NewTableName		fromxmlImportTestcross apply xml_data.nodes('/DsOrders/Cust') as Cust(C)[/code]Now, I'm sure its to do with the cross apply, so i tried the following, but this lists a single customer / order and every order item in the file![code="plain"]select     C.value('(Customers/CustomerID)[1]','INT') as CusID, 	C.value('(Customers/ContactName)[1]','varchar(50)') as ContactName, 	C.value('(Customers/Email)[1]','varchar(150)') as eml,	C.value('(Order/OrderNumber)[1]','INT') as OrderNo,	C.value('(Order/OrderDate)[1]','varchar(20)') as OrderDate,		D.value('(Description)[1]','varchar(120)') as ItemDesc,	D.value('(Price)[1]','money') as ItemPrice,	D.value('(ProductCode)[1]','INT') as ProdCode,	D.value('(ColourCodeId)[1]','varchar(120)') as ColCode,	D.value('(ColourCodeTitle)[1]','varchar(120)') as ColCodeTitle,	D.value('(Quantity)[1]','float(20)') as ItemQty	Into Tbl_NewTableName		fromxmlImportTestcross apply xml_data.nodes('/DsOrders/Cust') as Cust(C)cross apply xml_data.nodes('/DsOrders/Cust/OrderItems') as Items(D)[/code]I've been looking at this one, on and off for the last week and really need some guidance..As you can see, XML isn't my strongest point.Thanks in advance!David.</description><pubDate>Wed, 23 Jan 2013 01:39:55 GMT</pubDate><dc:creator>hb21l6</dc:creator></item></channel></rss>