﻿<?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  / XML Shred to tabular data / 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>Sun, 19 May 2013 13:30:48 GMT</lastBuildDate><ttl>20</ttl><item><title>RE: XML Shred to tabular data</title><link>http://www.sqlservercentral.com/Forums/Topic1425492-21-1.aspx</link><description>Yes, I like that idea. HahaThanks both for your time. I think I can work with that.Regards</description><pubDate>Fri, 01 Mar 2013 09:34:55 GMT</pubDate><dc:creator>NickBalaam</dc:creator></item><item><title>RE: XML Shred to tabular data</title><link>http://www.sqlservercentral.com/Forums/Topic1425492-21-1.aspx</link><description>[quote][b]NickBalaam (3/1/2013)[/b][hr]Thanks for the heads up. Unfortunately this is not our own XML, it's comes to us from a 3rd party and we have no control over the structure. Ideally it would have had something like &amp;lt;skill id=1&amp;gt;tSQL&amp;lt;/skill&amp;gt; but I can't really do much about it :-([/quote]Heh... actually, you can.  Invite them to dinner.  A nice pork chop dinner.  To make it so they understand, tie them to the chair and feed them the porchops... at point blank range with a Wrist Rocket. :-D  You'll get your point across.If these people are providing a "service", they need to provide it correctly.  If they're a customer, the need to help you help them.  Since the answer is always "No" unless you ask, contact the 3rd part and tell them they're doing it wrong and you want it fixed!</description><pubDate>Fri, 01 Mar 2013 09:08:17 GMT</pubDate><dc:creator>Jeff Moden</dc:creator></item><item><title>RE: XML Shred to tabular data</title><link>http://www.sqlservercentral.com/Forums/Topic1425492-21-1.aspx</link><description>As Jeff points out, the xml isn't ideal which is true, but I have come up with something that [u]makes a lot of assumptions![/u]. Mainly around the ordering of the xml which if changes, will break this so I give no assurances to this code :-D[code="sql"]DECLARE @xml XMLSET @xml = '&amp;lt;employees&amp;gt;&amp;lt;employee&amp;gt;&amp;lt;emp_id&amp;gt;1&amp;lt;/emp_id&amp;gt;&amp;lt;emp_name&amp;gt;Bob&amp;lt;/emp_name&amp;gt;&amp;lt;skills&amp;gt;	&amp;lt;skills_id&amp;gt;1&amp;lt;/skills_id&amp;gt;	&amp;lt;skills_id&amp;gt;tsql&amp;lt;/skills_id&amp;gt;	&amp;lt;skills_id&amp;gt;2&amp;lt;/skills_id&amp;gt;	&amp;lt;skills_id&amp;gt;SSRS&amp;lt;/skills_id&amp;gt;	&amp;lt;skills_id&amp;gt;3&amp;lt;/skills_id&amp;gt;	&amp;lt;skills_id&amp;gt;SSAS&amp;lt;/skills_id&amp;gt;	&amp;lt;skills_id&amp;gt;4&amp;lt;/skills_id&amp;gt;	&amp;lt;skills_id&amp;gt;SSIS&amp;lt;/skills_id&amp;gt;	&amp;lt;skills_id&amp;gt;5&amp;lt;/skills_id&amp;gt;	&amp;lt;skills_id&amp;gt;Replication&amp;lt;/skills_id&amp;gt;&amp;lt;/skills&amp;gt;&amp;lt;/employee&amp;gt;&amp;lt;employee&amp;gt;&amp;lt;emp_id&amp;gt;2&amp;lt;/emp_id&amp;gt;&amp;lt;emp_name&amp;gt;Frank&amp;lt;/emp_name&amp;gt;&amp;lt;skills&amp;gt;	&amp;lt;skills_id&amp;gt;1&amp;lt;/skills_id&amp;gt;	&amp;lt;skills_id&amp;gt;tsql&amp;lt;/skills_id&amp;gt;	&amp;lt;skills_id&amp;gt;2&amp;lt;/skills_id&amp;gt;	&amp;lt;skills_id&amp;gt;SSRS&amp;lt;/skills_id&amp;gt;	&amp;lt;skills_id&amp;gt;3&amp;lt;/skills_id&amp;gt;	&amp;lt;skills_id&amp;gt;SSAS&amp;lt;/skills_id&amp;gt;&amp;lt;/skills&amp;gt;&amp;lt;/employee&amp;gt;&amp;lt;/employees&amp;gt;'SELECT @xml = @xml.query('&amp;lt;employees&amp;gt;{	for $x in //employee 		return 			&amp;lt;employee emp_name="{$x/emp_name/text()}" emp_id="{$x/emp_id/text()}"&amp;gt;				{					for $y in $x/skills/skills_id[number(text()[1]) &amp;gt; 0]					return 						&amp;lt;skill id="{data($y)}" value="{data($x/skills/skills_id[. &amp;gt;&amp;gt; $y][1])}"/&amp;gt;				}			&amp;lt;/employee&amp;gt;}&amp;lt;/employees&amp;gt;')SELECT e.c.value('@emp_id', 'int') AS emp_id	, e.c.value('@emp_name', 'varchar(50)') AS emp_name	, s.c.value('@id', 'int') AS skills_id	, s.c.value('@value', 'varchar(50)') AS skillFROM @xml.nodes('/employees/employee') e(c)CROSS APPLY e.c.nodes('skill') AS s(c)[/code]Returns:[code="plain"]emp_id	emp_name	skills_id	skill1	Bob	1	tsql1	Bob	2	SSRS1	Bob	3	SSAS1	Bob	4	SSIS1	Bob	5	Replication2	Frank	1	tsql2	Frank	2	SSRS2	Frank	3	SSAS[/code]</description><pubDate>Fri, 01 Mar 2013 08:33:22 GMT</pubDate><dc:creator>arthurolcot</dc:creator></item><item><title>RE: XML Shred to tabular data</title><link>http://www.sqlservercentral.com/Forums/Topic1425492-21-1.aspx</link><description>Thanks for the heads up. Unfortunately this is not our own XML, it's comes to us from a 3rd party and we have no control over the structure. Ideally it would have had something like &amp;lt;skill id=1&amp;gt;tSQL&amp;lt;/skill&amp;gt; but I can't really do much about it :-(</description><pubDate>Fri, 01 Mar 2013 07:37:46 GMT</pubDate><dc:creator>NickBalaam</dc:creator></item><item><title>RE: XML Shred to tabular data</title><link>http://www.sqlservercentral.com/Forums/Topic1425492-21-1.aspx</link><description>[quote][b]NickBalaam (3/1/2013)[/b][hr]Hi, thanks for taking time to look at that. Ideally I'd like to see....Emp_id Skill_ID Skill_Name1 1 tSQL1 2 SSRS1 3 SSAS1 4 SSIS1 5 Replication2 1 tSQL2 2 SSRSetc[/quote]Just a heads up on that.  The XML you were provided is "poorly formed" in that, except by position in the file, there's no logical manner to associate a particular skill ID with the correct name.  You can't rely on the position in the file for these sorts of things because it's just not reliable.</description><pubDate>Fri, 01 Mar 2013 07:31:02 GMT</pubDate><dc:creator>Jeff Moden</dc:creator></item><item><title>RE: XML Shred to tabular data</title><link>http://www.sqlservercentral.com/Forums/Topic1425492-21-1.aspx</link><description>Hi, thanks for taking time to look at that. Ideally I'd like to see....Emp_id Skill_ID Skill_Name1 1 tSQL1 2 SSRS1 3 SSAS1 4 SSIS1 5 Replication2 1 tSQL2 2 SSRSetc</description><pubDate>Fri, 01 Mar 2013 07:23:45 GMT</pubDate><dc:creator>NickBalaam</dc:creator></item><item><title>RE: XML Shred to tabular data</title><link>http://www.sqlservercentral.com/Forums/Topic1425492-21-1.aspx</link><description>Here is a quick example to shred that xml to a flat table:[code="sql"]DECLARE @xml XMLSET @xml = '&amp;lt;employees&amp;gt;&amp;lt;employee&amp;gt;&amp;lt;emp_id&amp;gt;1&amp;lt;/emp_id&amp;gt;&amp;lt;emp_name&amp;gt;Bob&amp;lt;/emp_name&amp;gt;&amp;lt;skills&amp;gt;	&amp;lt;skills_id&amp;gt;1&amp;lt;/skills_id&amp;gt;	&amp;lt;skills_id&amp;gt;tsql&amp;lt;/skills_id&amp;gt;	&amp;lt;skills_id&amp;gt;2&amp;lt;/skills_id&amp;gt;	&amp;lt;skills_id&amp;gt;SSRS&amp;lt;/skills_id&amp;gt;	&amp;lt;skills_id&amp;gt;3&amp;lt;/skills_id&amp;gt;	&amp;lt;skills_id&amp;gt;SSAS&amp;lt;/skills_id&amp;gt;	&amp;lt;skills_id&amp;gt;4&amp;lt;/skills_id&amp;gt;	&amp;lt;skills_id&amp;gt;SSIS&amp;lt;/skills_id&amp;gt;	&amp;lt;skills_id&amp;gt;5&amp;lt;/skills_id&amp;gt;	&amp;lt;skills_id&amp;gt;Replication&amp;lt;/skills_id&amp;gt;&amp;lt;/skills&amp;gt;&amp;lt;/employee&amp;gt;&amp;lt;employee&amp;gt;&amp;lt;emp_id&amp;gt;2&amp;lt;/emp_id&amp;gt;&amp;lt;emp_name&amp;gt;Frank&amp;lt;/emp_name&amp;gt;&amp;lt;skills&amp;gt;	&amp;lt;skills_id&amp;gt;1&amp;lt;/skills_id&amp;gt;	&amp;lt;skills_id&amp;gt;tsql&amp;lt;/skills_id&amp;gt;	&amp;lt;skills_id&amp;gt;2&amp;lt;/skills_id&amp;gt;	&amp;lt;skills_id&amp;gt;SSRS&amp;lt;/skills_id&amp;gt;	&amp;lt;skills_id&amp;gt;3&amp;lt;/skills_id&amp;gt;	&amp;lt;skills_id&amp;gt;SSAS&amp;lt;/skills_id&amp;gt;&amp;lt;/skills&amp;gt;&amp;lt;/employee&amp;gt;&amp;lt;/employees&amp;gt;'SELECT e.c.value('(emp_id)[1]', 'int') AS emp_id	, e.c.value('(emp_name/text())[1]', 'varchar(50)') AS emp_name	, s.c.value('(.)[1]', 'varchar(50)') AS skills_idFROM @xml.nodes('/employees/employee') e(c)CROSS APPLY e.c.nodes('skills/skills_id') AS s(c)[/code]Not sure if it is going to be what you are after though looking at that data. Did you mean to have the skills id and the skill name in xml nodes of the same name? as by looking at the data i'm guessing you may would like to have it so the skills id is in a column and the skill name is also in a column and both related to each other rather than both in a single column.</description><pubDate>Fri, 01 Mar 2013 07:14:53 GMT</pubDate><dc:creator>arthurolcot</dc:creator></item><item><title>XML Shred to tabular data</title><link>http://www.sqlservercentral.com/Forums/Topic1425492-21-1.aspx</link><description>Hi, looking for tSQL help on shredding the following xml so that I can see (in this example) all skills per employee[code="xml"]'&amp;lt;employees&amp;gt;&amp;lt;employee&amp;gt;&amp;lt;emp_id&amp;gt;1&amp;lt;/emp_id&amp;gt;&amp;lt;emp_name&amp;gt;Bob&amp;lt;/emp_name&amp;gt;&amp;lt;skills&amp;gt;	&amp;lt;skills_id&amp;gt;1&amp;lt;/skills_id&amp;gt;	&amp;lt;skills_name&amp;gt;tsql&amp;lt;/skills_id&amp;gt;	&amp;lt;skills_id&amp;gt;2&amp;lt;/skills_id&amp;gt;	&amp;lt;skills_name&amp;gt;SSRS&amp;lt;/skills_id&amp;gt;	&amp;lt;skills_id&amp;gt;3&amp;lt;/skills_id&amp;gt;	&amp;lt;skills_name&amp;gt;SSAS&amp;lt;/skills_id&amp;gt;	&amp;lt;skills_id&amp;gt;4&amp;lt;/skills_id&amp;gt;	&amp;lt;skills_name&amp;gt;SSIS&amp;lt;/skills_id&amp;gt;	&amp;lt;skills_id&amp;gt;5&amp;lt;/skills_id&amp;gt;	&amp;lt;skills_name&amp;gt;Replication&amp;lt;/skills_id&amp;gt;&amp;lt;/skills&amp;gt;&amp;lt;/employee&amp;gt;&amp;lt;employee&amp;gt;&amp;lt;emp_id&amp;gt;2&amp;lt;/emp_id&amp;gt;&amp;lt;emp_name&amp;gt;Frank&amp;lt;/emp_name&amp;gt;&amp;lt;skills&amp;gt;	&amp;lt;skills_id&amp;gt;1&amp;lt;/skills_id&amp;gt;	&amp;lt;skills_name&amp;gt;tsql&amp;lt;/skills_id&amp;gt;	&amp;lt;skills_id&amp;gt;2&amp;lt;/skills_id&amp;gt;	&amp;lt;skills_name&amp;gt;SSRS&amp;lt;/skills_id&amp;gt;	&amp;lt;skills_id&amp;gt;3&amp;lt;/skills_id&amp;gt;	&amp;lt;skills_name&amp;gt;SSAS&amp;lt;/skills_id&amp;gt;&amp;lt;/skills&amp;gt;&amp;lt;/employee&amp;gt;&amp;lt;/employees&amp;gt;'[/code]Thanks*edited to show skill_id AND skill_name (not just skill_id)</description><pubDate>Fri, 01 Mar 2013 07:02:53 GMT</pubDate><dc:creator>NickBalaam</dc:creator></item></channel></rss>