Próbuję dodać przestrzeń nazw w xml za pomocą Z XMLNAMESPACES.Dodaj przestrzeń nazw w xml generowanym przez zapytanie
Kiedy wykonać moje zapytania, przestrzeń nazw jest dodany do elementu głównego, ale z drugiego elementu mam xmlns = „”, a także ... i chciałbym, aby usunąć to ...
I, pod warunkiem Przykład:
zapytania do tworzenia tabeli i dane:
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
generowania xml z tych zapytań:
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 generowane:
<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>
Więc próbuję to także:
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')
XML generowany jest teraz:
<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, co się stanie, jeśli wstawisz 'WITH XMLNAMESPACES (DEFAULT 'http://www.mynamespace.com')' na początkowym SELECT w instrukcji 'SET @XML = ...'?(jak również tam, gdzie już jest) – LarsH
Próbowałem, ale nie mogę ustawić Z XMLNAMESPACES w SET ... Inną rzeczą, faktycznie za każdym razem istnieje SELECT, przestrzeń nazw jest ustawiona przez serwer SQL. – Dan
Tak, zamieniłem SET na SELECT i umieszczam WITH XMLNAMESPACES tuż przed. Zapytanie jest teraz wykonywane, ale wystarczy umieścić przestrzeń nazw za pomocą elementów "Wiersz" ... – Dan