Intento agregar un espacio de nombres en xml usando WITH XMLNAMESPACES.Agregue un espacio de nombres en un xml generado por una consulta
Cuando ejecuto mis consultas, se añade el espacio de nombres con el elemento raíz, pero con el segundo elemento tengo xmlns = "", así ... y me gustaría quitar ese ...
proporcioné un ejemplo:
consultas para la creación de la tabla y los datos:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[tblTest](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](30) NOT NULL,
CONSTRAINT [PK_tblTest] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET IDENTITY_INSERT [dbo].[tblTest] ON
INSERT [dbo].[tblTest] ([Id], [Name]) VALUES (1, N'Barack')
INSERT [dbo].[tblTest] ([Id], [Name]) VALUES (2, N'Nicolas')
INSERT [dbo].[tblTest] ([Id], [Name]) VALUES (3, N'Brian')
SET IDENTITY_INSERT [dbo].[tblTest] OFF
genero el xml con estas consultas:
DECLARE @Xml xml
SET @Xml = (SELECT Id, Name
FROM dbo.tblTest
FOR XML PATH('Row'), ROOT('DataRows'));
WITH XMLNAMESPACES (DEFAULT 'http://www.mynamespace.com')
SELECT @Xml FOR XML PATH('Names');
XML generados:
<Names xmlns="http://www.mynamespace.com">
<DataRows xmlns="">
<Row>
<Id>1</Id>
<Name>Barak</Name>
</Row>
<Row>
<Id>2</Id>
<Name>Nicolas</Name>
</Row>
<Row>
<Id>3</Id>
<Name>Brian</Name>
</Row>
</DataRows>
</Names>
Por lo tanto, trato de esto también:
DECLARE @Xml xml
;WITH XMLNAMESPACES (DEFAULT 'http://www.mynamespace.com')
SELECT @Xml = (SELECT Id, Name
FROM dbo.tblTest
FOR XML PATH('Row'), TYPE);
;WITH XMLNAMESPACES (DEFAULT 'http://www.mynamespace.com')
SELECT @Xml
FOR XML PATH('DataRows'), ROOT('Names')
el XML generado es ahora:
<Names xmlns="http://www.mynamespace.com">
<DataRows>
<Row xmlns="http://www.mynamespace.com">
<Id>1</Id>
<Name>Barak</Name>
</Row>
<Row xmlns="http://www.mynamespace.com">
<Id>2</Id>
<Name>Nicolas</Name>
</Row>
<Row xmlns="http://www.mynamespace.com">
<Id>3</Id>
<Name>Brian</Name>
</Row>
</DataRows>
</Names>
@Daniel, ¿qué ocurre si coloca 'WITH XMLNAMESPACES (DEFAULT 'http://www.mynamespace.com')' en su SELECT inicial en la instrucción 'SET @XML = ...'?(y donde ya está) – LarsH
Lo intenté, pero no puedo establecer un WITH XMLNAMESPACES en un SET ... Otra cosa, de hecho, cada vez que hay un SELECT, el espacio de nombres lo establece el servidor SQL. – Dan
Así que, he reemplazado el SET por un SELECT y puse el WITH XMLNAMESPACES justo antes. La consulta se ejecuta ahora pero solo coloca el espacio de nombres con los elementos "Fila" ... – Dan