Search code examples
sql-server-2005xml-namespacesfor-xml-path

How to add namespaces to root node in SQL Server 2005 using XML FOR PATH


I've created Select...FOR XML PATH statement using SQL Server 2005 and need to add several namespaces and schema reference to the root node.

xsi:schemaLocation="http://somewhere/v1/ schemaname.xsd"
xmlns="http://somewhere/v1/"
xmlns:lom="http://somewhere/lom/v1/"
xmlns:a="http://somewhere/a/v1/"
xmlns:cf="http://somewhere/cf/v1/"
xmlns:co="http://somewhere/co/v1/"
xmlns:hx="http://somewhere/hx/v1/" 
xmlns:m="http://somewhere/m/v1/" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

Any pointers would be greatly appreciated.

Thanks.


Solution

  • You could try something like this:

    with xmlnamespaces
      (
       default 'http://somewhere/v1/',
      'http://somewhere/lom/v1/' as lom,
      'http://somewhere/a/v1/' as a,
      'http://somewhere/cf/v1/' as cf,
      'http://somewhere/co/v1/' as co,
      'http://somewhere/hx/v1/' as hx,
      'http://somewhere/m/v1/' as m,
      'http://www.w3.org/2001/XMLSchema-instance' as xsi
      )
    select 'http://somewhere/v1/ schemaname.xsd' as "@xsi:schemaLocation"
    
    for xml path('element')
    

    Result:

    <element xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
             xmlns:m="http://somewhere/m/v1/" 
             xmlns:hx="http://somewhere/hx/v1/" 
             xmlns:co="http://somewhere/co/v1/" 
             xmlns:cf="http://somewhere/cf/v1/" 
             xmlns:a="http://somewhere/a/v1/" 
             xmlns:lom="http://somewhere/lom/v1/" 
             xmlns="http://somewhere/v1/" 
             xsi:schemaLocation="http://somewhere/v1/ schemaname.xsd" />