XML
declare @xmlDoc xml
set @xmlDoc='
<people>
<star id="001">
<name>周杰伦</name>
<job >歌手</job >
<age>50</age>
</star>
<star id="002">
<name>周星驰</name>
<job >导演</job >
<age>45</age>
</star>
<star id="003">
<name>成龙</name>
<job >演员</job >
<age>44</age>
</star>
<star id="004">
<name mark="明天开演唱会">刘德华</name>
<name newmark="全球性的">刘德华</name>
<job >歌手</job >
<age>49</age>
</star>
</people>
'
--修改属性
--set @xmlDoc.modify('replace value of (people/star[@id="004"]/name/@mark)[2] with "修改测试"')
/*
<people>
<star id="001">
<name>周杰伦</name>
<job>歌手</job>
<age>50</age>
</star>
<star id="002">
<name>周星驰</name>
<job>导演</job>
<age>45</age>
</star>
<star id="003">
<name>成龙</name>
<job>演员</job>
<age>44</age>
</star>
<star id="004">
<name mark="明天开演唱会">刘德华</name>
<name newmark="全球性的">刘德华</name>
<job>歌手</job>
<age>49</age>
</star>
</people>
*/
--删除属性
--set @xmlDoc.modify('delete people/star[@id="004"]/name[2]/@newmark')
/*
<people>
<star id="001">
<name>周杰伦</name>
<job>歌手</job>
<age>50</age>
</star>
<star id="002">
<name>周星驰</name>
<job>导演</job>
<age>45</age>
</star>
<star id="003">
<name>成龙</name>
<job>演员</job>
<age>44</age>
</star>
<star id="004">
<name mark="明天开演唱会">刘德华</name>
<name>刘德华</name>
<job>歌手</job>
<age>49</age>
</star>
</people>
*/
--插入属性
--set @xmlDoc.modify('insert attribute 插入{"这里是插入"} into (/people/star[@id=0001]/name)[1]')
/*
<people>
<star id="001">
<name 插入="这里是插入">周杰伦</name>
<job>歌手</job>
<age>50</age>
</star>
<star id="002">
<name>周星驰</name>
<job>导演</job>
<age>45</age>
</star>
<star id="003">
<name>成龙</name>
<job>演员</job>
<age>44</age>
</star>
<star id="004">
<name mark="明天开演唱会">刘德华</name>
<name newmark="全球性的">刘德华</name>
<job>歌手</job>
<age>49</age>
</star>
</people>
*/
--查看属性
--select @xmlDoc.value('(/people/star/name/@mark)[1]', 'nvarchar(max)')
/*
明天开演唱会
*/
--删除节点
--set @xmlDoc.modify('delete /people/star[@id=0004]')
/*
<people>
<star id="001">
<name>周杰伦</name>
<job>歌手</job>
<age>50</age>
</star>
<star id="002">
<name>周星驰</name>
<job>导演</job>
<age>45</age>
</star>
<star id="003">
<name>成龙</name>
<job>演员</job>
<age>44</age>
</star>
</people>
*/
--修改节点
--set @xmlDoc.modify('replace value of (/people/star[1]/job/text())[1] with "耕田"')
/*
<people>
<star id="001">
<name>周杰伦</name>
<job>耕田</job>
<age>50</age>
</star>
<star id="002">
<name>周星驰</name>
<job>导演</job>
<age>45</age>
</star>
<star id="003">
<name>成龙</name>
<job>演员</job>
<age>44</age>
</star>
<star id="004">
<name mark="明天开演唱会">刘德华</name>
<name newmark="全球性的">刘德华</name>
<job>歌手</job>
<age>49</age>
</star>
</people>
*/
--set @xmlDoc.modify('replace value of (/people/star[@id=004]/job/text())[1] with "杀手"')
/*
<people>
<star id="001">
<name>周杰伦</name>
<job>歌手</job>
<age>50</age>
</star>
<star id="002">
<name>周星驰</name>
<job>导演</job>
<age>45</age>
</star>
<star id="003">
<name>成龙</name>
<job>演员</job>
<age>44</age>
</star>
<star id="004">
<name mark="明天开演唱会">刘德华</name>
<name newmark="全球性的">刘德华</name>
<job>杀手</job>
<age>49</age>
</star>
</people>
*/
--set @xmlDoc.modify('replace value of (/people/star/@id)[1] with 3.14159265')
/*
<people>
<star id="3.14159265">
<name>周杰伦</name>
<job>歌手</job>
<age>50</age>
</star>
<star id="002">
<name>周星驰</name>
<job>导演</job>
<age>45</age>
</star>
<star id="003">
<name>成龙</name>
<job>演员</job>
<age>44</age>
</star>
<star id="004">
<name mark="明天开演唱会">刘德华</name>
<name newmark="全球性的">刘德华</name>
<job>歌手</job>
<age>49</age>
</star>
</people>
*/
--插入节点
--set @xmlDoc.modify('insert <star id="4564564"> <name>麦克</name><job>演员</job><age>44</age></star> before (/people/star)[4]')
/*
<people>
<star id="001">
<name>周杰伦</name>
<job>歌手</job>
<age>50</age>
</star>
<star id="002">
<name>周星驰</name>
<job>导演</job>
<age>45</age>
</star>
<star id="003">
<name>成龙</name>
<job>演员</job>
<age>44</age>
</star>
<star id="4564564">
<name>麦克</name>
<job>演员</job>
<age>44</age>
</star>
<star id="004">
<name mark="明天开演唱会">刘德华</name>
<name newmark="全球性的">刘德华</name>
<job>歌手</job>
<age>49</age>
</star>
</people>
*/
--查找
--找到周杰伦(第一个name)
--select @xmlDoc.value('(/people/star/name)[1]', 'nvarchar(200)')
/*
周杰伦
*/
--找到周星驰的所有(一行显示,周星驰在位置第二)
--select @xmlDoc.value('(/people/star)[2]', 'nvarchar(60)')
/*
周星驰导演45
*/
--列出全部
--select @xmlDoc.value('(/people)[1]', 'nvarchar(60)')
/*
周杰伦歌手50周星驰导演45成龙演员44刘德华刘德华歌手49
*/
--找到第二个name
--select @xmlDoc.value('(/people/star/name)[2]', 'nvarchar(60)')
/*
周星驰
*/
--查看第二个ID
--select @xmlDoc.value('(/people/star/@id)[2]', 'nvarchar(max)')
/*
002
*/
--使用count 函数
SELECT CAST( CAST (@xmlDoc.query('count(/people/star) ') AS VARCHAR(20)) AS int)AS count
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器