sql-server - sql server FOR XML xpath模式:如何生成嵌套的XML id 1和2
问题描述
我是一个 xml 字符串,如下所示。我想使用 sql server for xml xpath 来生成这个 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>
我相信这就是你想要做的。这里真正的“魔力”在于对列数据进行别名处理。
推荐阅读
- java - Hibernatre (jpa repository) - 尝试获取多对多关系数据
- django - 使用父字段序列化评论(模型)数据以在 Django 中获取评论回复的方法
- webpack - Webpack 文件加载器不适用于 html
- apache-spark - 任何人都可以在 Spark 中实现 CombineByKey() 而不是 GroupByKey() 来对元素进行分组吗?
- wordpress - 面临 WordPress 主题的问题?
- android - Flutter Doctor 中的“Android 许可证状态未知”
- python - AttributeError:“DataFrame”对象没有“保存”属性
- php - PHP日期strtotime
- machine-learning - Pytorch,切片张量导致 RuntimeError:: 梯度计算所需的变量之一已被就地操作修改:
- c - C程序示例2