<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>XML &#8211; SQLpowered.com</title>
	<atom:link href="https://sqlpowered.com/tag/xml/feed/" rel="self" type="application/rss+xml" />
	<link>https://sqlpowered.com</link>
	<description>SQL Server + BI</description>
	<lastBuildDate>Wed, 24 Jun 2020 09:04:58 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://sqlpowered.com/wp-content/uploads/2020/07/FavIcon-e1594067873682-99x100.png</url>
	<title>XML &#8211; SQLpowered.com</title>
	<link>https://sqlpowered.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Převod seznamu hodnot s oddělovačem do tabulky pomocí XML</title>
		<link>https://sqlpowered.com/prevod-seznamu-hodnot-s-oddelovacem-do-tabulky-pomoci-xml/</link>
					<comments>https://sqlpowered.com/prevod-seznamu-hodnot-s-oddelovacem-do-tabulky-pomoci-xml/#respond</comments>
		
		<dc:creator><![CDATA[Jan Dvořák]]></dc:creator>
		<pubDate>Mon, 04 May 2015 20:59:49 +0000</pubDate>
				<category><![CDATA[T-SQL]]></category>
		<category><![CDATA[XML]]></category>
		<guid isPermaLink="false">https://sqlpowered.com/?p=637</guid>

					<description><![CDATA[Klasický problém, který řešíme téměř každý den je, jak si převést seznam hodnot oddělených čárkou nebo jiným znakem z textového řetězce do tabulkového formátu, abychom s daty mohli dále pracovat. Jednou z možností je využití schopností T-SQL jazyka pro práci s XML daty. Náš testovací řetězec si jednoduše pomocí REPLACE()...]]></description>
										<content:encoded><![CDATA[<p>Klasický problém, který řešíme téměř každý den je, jak si převést seznam hodnot oddělených čárkou nebo jiným znakem z textového řetězce do tabulkového formátu, abychom s daty mohli dále pracovat. Jednou z možností je využití schopností T-SQL jazyka pro práci s XML daty. Náš testovací řetězec si jednoduše pomocí REPLACE() převedeme na řetězec ve formátu XML, která následně pomocí NODES() funkce převedeme na data v tabulárním formátu:</p>
<pre class="lang:tsql decode:true ">DECLARE @var NVARCHAR(MAX)
DECLARE @xml XML

SET @var = '1,2,3,4,5'

SET @xml = N'&lt;root&gt;&lt;r&gt;' + REPLACE(@var,',','&lt;/r&gt;&lt;r&gt;') + '&lt;/r&gt;&lt;/root&gt;'

SELECT [t].[value]('.','int') AS [Id]
FROM @xml.[nodes]('//root/r') AS [a]([t])
GO</pre>
<p><img decoding="async" class="alignnone size-full wp-image-3052" src="https://sqlpowered.com/wp-content/uploads/2015/05/STRING_SPLIT_1.png" alt="" width="59" height="115" srcset="https://sqlpowered.com/wp-content/uploads/2015/05/STRING_SPLIT_1.png 59w, https://sqlpowered.com/wp-content/uploads/2015/05/STRING_SPLIT_1-51x100.png 51w" sizes="(max-width: 59px) 100vw, 59px" /></p>
<p>Od verze SQL Server 2016 (compatibility level = 130) už naštěstí nemusíme podobný scénář absolvovat a stačí využití novou funkci pro parsování řetězců <a href="https://docs.microsoft.com/en-us/sql/t-sql/functions/string-split-transact-sql?view=sql-server-2017" target="_blank" rel="noopener noreferrer">STRING_SPLIT()</a>:</p>
<pre class="lang:tsql decode:true ">DECLARE @var NVARCHAR(MAX)

SET @var = '1,2,3,4,5'

SELECT * FROM STRING_SPLIT(@var, ',')
GO</pre>
<p><img decoding="async" class="alignnone size-full wp-image-3052" src="https://sqlpowered.com/wp-content/uploads/2015/05/STRING_SPLIT_1.png" alt="" width="59" height="115" srcset="https://sqlpowered.com/wp-content/uploads/2015/05/STRING_SPLIT_1.png 59w, https://sqlpowered.com/wp-content/uploads/2015/05/STRING_SPLIT_1-51x100.png 51w" sizes="(max-width: 59px) 100vw, 59px" /></p>
]]></content:encoded>
					
					<wfw:commentRss>https://sqlpowered.com/prevod-seznamu-hodnot-s-oddelovacem-do-tabulky-pomoci-xml/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Extracting data from XML</title>
		<link>https://sqlpowered.com/extracting-data-from-xml/</link>
					<comments>https://sqlpowered.com/extracting-data-from-xml/#respond</comments>
		
		<dc:creator><![CDATA[Jan Dvořák]]></dc:creator>
		<pubDate>Sun, 26 Apr 2015 20:43:52 +0000</pubDate>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[XML]]></category>
		<guid isPermaLink="false">https://sqlpowered.com/?p=614</guid>

					<description><![CDATA[Getting data from XML is much easier with native support of XML in SQL Server. But it still requires solid knowledge of XML specific things like XPATH or XQUERY. The goal of this article is to collect some useful examples of how to extract values from XML and save time...]]></description>
										<content:encoded><![CDATA[<p>Getting data from XML is much easier with native support of XML in SQL Server. But it still requires solid knowledge of XML specific things like XPATH or XQUERY. The goal of this article is to collect some useful examples of how to extract values from XML and save time when searching for it. Most of them are easy to understand and simple for copy and edit purposes.</p>
<h5>1. Extracting values using .nodes method and XPATH navigation</h5>
<p>Sample XML:</p>
<pre class="lang:tsql decode:true">DECLARE @XML XML

SET @XML = 
N'
&lt;Rows xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Description = "Test Description" User = "test_user"&gt;
   &lt;Row RowId = "1"&gt;
      &lt;Columns&gt;
         &lt;Column Name = "Col1" Value = "50"/&gt;
      &lt;/Columns&gt;
   &lt;/Row&gt;
   &lt;Row RowId = "2"&gt;
      &lt;Columns&gt;
         &lt;Column Name = "Col1" Value = "70"/&gt;
         &lt;Column Name = "Col2" Value = "80"/&gt;
         &lt;Column Name = "Col3"/&gt;
      &lt;/Columns&gt;
   &lt;/Row&gt;
&lt;/Rows&gt;
'</pre>
<p>Extract User and Description values from the root element:</p>
<pre class="lang:tsql decode:true">SELECT 
    OneRow.value('@User', 'nvarchar(128)') [UserName],
    OneRow.value('@Description', 'nvarchar(1000)') [Description]
FROM @XML.nodes('/Rows') RowSet(OneRow)</pre>
<p><img decoding="async" class="alignnone size-full wp-image-615" src="https://sqlpowered.com/wp-content/uploads/2015/06/XMLnodesWithXPATH.jpg" alt="XMLnodesWithXPATH" width="195" height="41" /></p>
<p>Extract values from inner elements. See how CROSS APPLY is used there.</p>
<pre class="lang:tsql decode:true">SELECT 
    OneRow.value('@RowId', 'VARCHAR(15)') RowId,
    Item.value('@Name', 'NVARCHAR(128)') ColumnName,
    Item.value('@Value', 'NVARCHAR(MAX)') Value
FROM @XML.nodes('/Rows/Row') RowSet(OneRow)
    CROSS APPLY OneRow.nodes('Columns/Column') Col(Item)</pre>
<p><img decoding="async" class="alignnone size-full wp-image-616" src="https://sqlpowered.com/wp-content/uploads/2015/06/XMLnodesWithXPATH2.jpg" alt="XMLnodesWithXPATH2" width="203" height="96" /></p>
]]></content:encoded>
					
					<wfw:commentRss>https://sqlpowered.com/extracting-data-from-xml/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Spojení řetězců pomocí FOR XML PATH</title>
		<link>https://sqlpowered.com/spojeni-retezcu-pomoci-for-xml-path/</link>
					<comments>https://sqlpowered.com/spojeni-retezcu-pomoci-for-xml-path/#respond</comments>
		
		<dc:creator><![CDATA[Jan Dvořák]]></dc:creator>
		<pubDate>Thu, 13 Nov 2014 20:00:14 +0000</pubDate>
				<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[XML]]></category>
		<guid isPermaLink="false">https://sqlpowered.com/?p=407</guid>

					<description><![CDATA[Spojení textových řetězců z více sloupců na řádek můžeme v SQL Serveru v edicích 2016 a nižších vyřešit pomocí FOR XML PATH a je to i vůbec nejpoužívanější způsob. V SQL Serveru 2017 dosáhneme stejného výsledku mnohem elegantnější cestou pomocí funkce STRING_AGG(), která ve všem plně nahradí FOR XML PATH....]]></description>
										<content:encoded><![CDATA[<p>Spojení textových řetězců z více sloupců na řádek můžeme v SQL Serveru v edicích 2016 a nižších vyřešit pomocí FOR XML PATH a je to i vůbec nejpoužívanější způsob. V SQL Serveru 2017 dosáhneme stejného výsledku mnohem elegantnější cestou pomocí funkce <a href="https://sqlpowered.com/string_agg-konecne-smysluplne-resi-spojovani-retezcu-v-datovych-setech/">STRING_AGG()</a>, která ve všem plně nahradí FOR XML PATH.</p>
<p><span id="more-407"></span></p>
<p>Na následujících příkladech si ukážeme, jak na to. Naplníme si testovací tabulku jednoduchými řetězci, které spojíme dohromady pomocí FOX XML PATH. V příkladu vidíme dva možné zápisy: se specifikací datových typů a zjednodušený:</p>
<pre class="lang:tsql decode:true ">CREATE TABLE dbo.SampleTable
(
    Value VARCHAR(100)
)
GO

INSERT INTO dbo.SampleTable
        ( Value )
    SELECT 'Value1' UNION ALL
    SELECT 'Value2' UNION ALL
    SELECT 'Value3' UNION ALL
    SELECT 'Value4'
GO

SELECT STUFF((SELECT ',' AS "text()", '''' AS "text()", Value AS "text()",  '''' AS "text()"
                 FROM dbo.SampleTable
                 FOR XML PATH(''))
             , 1, 1, '')
GO

-- returns: 'Value1','Value2','Value3','Value4'

SELECT STUFF((SELECT ','  + '''' + Value + '''' FROM dbo.SampleTable FOR XML PATH('')), 1, 1, '')
GO

-- returns: 'Value1','Value2','Value3','Value4'</pre>
<p>V dalším příkladu vidíme použití stejné metody v rámci datového setu, kdy agregujeme názvy měst pro jednotlivé státy:</p>
<pre class="lang:tsql decode:true ">-- create sample tables
CREATE TABLE dbo.tblCountry
(
    Id INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
    Name VARCHAR(100) NOT NULL
)

CREATE TABLE dbo.tblCity
(
    Id INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
    CountryId INT NOT NULL,
    NAME VARCHAR(100) NOT NULL
)    

-- populate data
ALTER TABLE dbo.tblCity ADD CONSTRAINT FK_tblCity_tblCity FOREIGN KEY (CountryId) 
    REFERENCES dbo.tblCity (Id)

INSERT INTO dbo.tblCountry
    VALUES ('Germany'), ('Czech Republic')

INSERT INTO dbo.tblCity
    VALUES (1, 'Bonn'), (1, 'Berlin')

INSERT INTO dbo.tblCity
    VALUES (2, 'Praha'), (2, 'Brno'), (2, 'Ostrava')

-- review data
SELECT *
FROM dbo.tblCountry country
    INNER JOIN dbo.tblCity city ON city.CountryId = country.Id</pre>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-160" src="https://sqlpowered.com/wp-content/uploads/2015/06/CSVListOfValuesInsideColumn1.jpg" alt="CSVListOfValuesInsideColumn1" width="283" height="115" /></p>
<pre class="lang:tsql decode:true ">-- put cities to inline CSV format
SELECT *
FROM dbo.tblCountry country
    CROSS APPLY (SELECT stuff((SELECT ', ' + c.Name 
                 FROM dbo.tblCity c 
                 WHERE c.CountryId = country.Id
                 FOR XML PATH('')), 1,2,'') Cities
                 FROM (SELECT 1 ID) a) city</pre>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-161" src="https://sqlpowered.com/wp-content/uploads/2015/06/CSVListOfValuesInsideColumn2.jpg" alt="CSVListOfValuesInsideColumn2" width="262" height="58" /></p>
]]></content:encoded>
					
					<wfw:commentRss>https://sqlpowered.com/spojeni-retezcu-pomoci-for-xml-path/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
