Я хочу преобразовать свои данные в строку xml с помощью запроса sql. Я пробовал код ниже (с RAW, AUTO, PATH), но формат вывода другой. Как получить нужный формат?

DECLARE @ValueVM TABLE
(
    Id INT,
    Text VARCHAR(MAX),
    IsDefault VARCHAR(10)
)

DECLARE @xml XML;

INSERT INTO @ValueVM
SELECT 1,'Sample Text','false'

SELECT * FROM @ValueVM for XML PATH(''), ELEMENTS;

Требуемый формат

'<?xml version="1.0"?><ValueVM xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><Id>0</Id><Text>sample</Text><IsDefault>false</IsDefault></ValueVM>'  

Текущий формат

'<Id>1</Id><Text>Sample Text</Text><IsDefault>false</IsDefault>'
1
Sreekanth Jagaleti 13 Мар 2018 в 21:02

2 ответа

Лучший ответ

Вы можете попробовать следующий код

DECLARE @ValueVM TABLE
(
    Id INT,
    Text VARCHAR(MAX),
    IsDefault VARCHAR(10)
)


INSERT INTO @ValueVM
SELECT 1,'Sample Text','false';

DECLARE @FinalXML NVARCHAR(MAX)=
(
    SELECT '<?xml version="1.0"?>'
           +
           CAST((SELECT * FROM @ValueVM AS ValueVM for XML AUTO, ELEMENTS XSINIL) AS NVARCHAR(MAX))
);
SELECT @FinalXML;
1
Emdad 14 Мар 2018 в 06:02

Невозможно сделать это в простой форме. Пожалуйста, попробуйте это:

DECLARE @ValueVM TABLE
(
    Id INT,
    Text VARCHAR(MAX),
    IsDefault VARCHAR(10)
)

DECLARE @xml XML;

INSERT INTO @ValueVM
SELECT 1,'Sample Text','false'


DECLARE @resultXML XML=
(
    SELECT * FROM @ValueVM ValueVM 
    for XML Auto, elements XSINIL
);

DECLARE @resultXMLAndHeader NVARCHAR(MAX)=
(
    SELECT '<?xml version="1.0" encoding="UTF-8"?>'
           +
        replace(CAST(@resultXML AS NVARCHAR(MAX)), 'instance">', 'instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">')
);
SELECT @resultXMLAndHeader;
0
vicosanz 13 Мар 2018 в 21:01