sql 服务器 FOR XML xpath 模式:如何生成嵌套的 XML id 1 和 2
sql server FOR XML xpath mode: how to generate nested XML id 1 and 2
我是一个 xml 字符串,如下所示。我想为 xml xpath 使用 sql 服务器来生成此 xml 字符串。我很难得到 id="IP1" 和 id="IP2"。你能帮我吗?非常感谢你。
<root>
<InsuredOrPrincipal id="IP1">
<GeneralPartyInfo>
<NameInfo>
<PersonName>
<Surname>A </Surname>
<GivenName>B</GivenName>
</PersonName>
</NameInfo>
</GeneralPartyInfo>
</InsuredOrPrincipal>
<InsuredOrPrincipal id="IP2">
<GeneralPartyInfo>
<NameInfo>
<PersonName>
<Surname>A </Surname>
<GivenName>B</GivenName>
</PersonName>
</NameInfo>
</GeneralPartyInfo>
</InsuredOrPrincipal>
</root>
这应该可以满足您的需求。您可以 运行 SSMS 中的代码以查看它的运行情况。
-- create table variable
DECLARE @table TABLE ( id VARCHAR(10), Surname VARCHAR(50), GivenName VARCHAR(50) );
-- insert test data
INSERT INTO @table (
id, Surname, GivenName
)
VALUES
( 'IP1', 'A1', 'B1' )
, ( 'IP2', 'A2', 'B2' );
-- return xml results from test data as per required schema
SELECT
id AS 'InsuredAsPrincipal/@id'
, Surname AS 'InsuredAsPrincipal/GeneralPartyInfo/NameInfo/PersonName/Surname'
, GivenName AS 'InsuredAsPrincipal/GeneralPartyInfo/NameInfo/PersonName/GivenName'
FROM @table
FOR XML PATH ( '' ), ROOT( 'root' );
返回的结果 XML 是:
<root>
<InsuredAsPrincipal id="IP1">
<GeneralPartyInfo>
<NameInfo>
<PersonName>
<Surname>A1</Surname>
<GivenName>B1</GivenName>
</PersonName>
</NameInfo>
</GeneralPartyInfo>
</InsuredAsPrincipal>
<InsuredAsPrincipal id="IP2">
<GeneralPartyInfo>
<NameInfo>
<PersonName>
<Surname>A2</Surname>
<GivenName>B2</GivenName>
</PersonName>
</NameInfo>
</GeneralPartyInfo>
</InsuredAsPrincipal>
</root>
我相信这就是您想要做的。真正的 "magic" 是为您的列数据设置别名。
我是一个 xml 字符串,如下所示。我想为 xml xpath 使用 sql 服务器来生成此 xml 字符串。我很难得到 id="IP1" 和 id="IP2"。你能帮我吗?非常感谢你。
<root>
<InsuredOrPrincipal id="IP1">
<GeneralPartyInfo>
<NameInfo>
<PersonName>
<Surname>A </Surname>
<GivenName>B</GivenName>
</PersonName>
</NameInfo>
</GeneralPartyInfo>
</InsuredOrPrincipal>
<InsuredOrPrincipal id="IP2">
<GeneralPartyInfo>
<NameInfo>
<PersonName>
<Surname>A </Surname>
<GivenName>B</GivenName>
</PersonName>
</NameInfo>
</GeneralPartyInfo>
</InsuredOrPrincipal>
</root>
这应该可以满足您的需求。您可以 运行 SSMS 中的代码以查看它的运行情况。
-- create table variable
DECLARE @table TABLE ( id VARCHAR(10), Surname VARCHAR(50), GivenName VARCHAR(50) );
-- insert test data
INSERT INTO @table (
id, Surname, GivenName
)
VALUES
( 'IP1', 'A1', 'B1' )
, ( 'IP2', 'A2', 'B2' );
-- return xml results from test data as per required schema
SELECT
id AS 'InsuredAsPrincipal/@id'
, Surname AS 'InsuredAsPrincipal/GeneralPartyInfo/NameInfo/PersonName/Surname'
, GivenName AS 'InsuredAsPrincipal/GeneralPartyInfo/NameInfo/PersonName/GivenName'
FROM @table
FOR XML PATH ( '' ), ROOT( 'root' );
返回的结果 XML 是:
<root>
<InsuredAsPrincipal id="IP1">
<GeneralPartyInfo>
<NameInfo>
<PersonName>
<Surname>A1</Surname>
<GivenName>B1</GivenName>
</PersonName>
</NameInfo>
</GeneralPartyInfo>
</InsuredAsPrincipal>
<InsuredAsPrincipal id="IP2">
<GeneralPartyInfo>
<NameInfo>
<PersonName>
<Surname>A2</Surname>
<GivenName>B2</GivenName>
</PersonName>
</NameInfo>
</GeneralPartyInfo>
</InsuredAsPrincipal>
</root>
我相信这就是您想要做的。真正的 "magic" 是为您的列数据设置别名。