sql-server - 如何在 SQL 中拆分两个具有相同子名称的 xml 标签
问题描述
我创建了一个脚本,它从 SQL 中的表中获取数据并生成 XML 输出。父、子和子标签都是相同的,对于 2 个标签。SQL 脚本将它们作为一个 XML 值而不是 2 个输出。
SELECT
Request.TransactionRef AS [RequestHeader/RequestID],
'Deal.Trial' AS [RequestHeader/Action],
'DoDealValidate' AS [RequestHeader/ActionFlags/Flag],
'DoDealDerive' AS [RequestHeader/ActionFlags/Flag]
目前的结果是:
<ActionFlags>
<Flag>DoDealValidateDoDealDerive</Flag>
</ActionFlags>
<ActionFlags>
<Flag>DoDealValidate</Flag>
<Flag>DoDealDerive</Flag>
</ActionFlags>
解决方案
只需在两者之间放置一些空的东西:
SELECT
'blah' AS [RequestHeader/RequestID],
'Deal.Trial' AS [RequestHeader/Action],
'DoDealValidate' AS [RequestHeader/ActionFlags/Flag],
NULL AS [RequestHeader/ActionFlags],
'DoDealDerive' AS [RequestHeader/ActionFlags/Flag]
FOR XML PATH('row');
的背景:
引擎在 SELECT 的列中运行并一个接一个地构建它们。
- 嗯,有一个
<RequestHeader>
可以打开 - 并且有一个
<RequestID>
可以打开 - 再次
<RequestHeader>
,仍然开放,没什么可去的 - 还有
<Action>
下面...哦,我们必须关闭<RequestID>
并打开一个新的<Action>
- 等等...
在您的代码<Flag>
中仍然是打开的,因此内容被写入打开的元素。
我的改变会让引擎思考
- 啊,我们上一层,所以我们关闭了
<Flag>
第一个……哎呀,没有什么可写的了…… - 现在有一些 for
<Flag>
,它不再打开了,我们必须重新打开一个(新)<Flag>
节点 - 等等...
推荐阅读
- vb6 - VB6 XmlHttp.send STRING 不起作用。使用 Cstr(String) 修复。帮助理解
- java - com.google.firebase.database.DatabaseException:无法将 java.lang.String 类型的对象转换为 com.studentcornerapp.studentcorner.Posts.Posts 类型
- r - 如何以与 raster::plotRGB 相同的方式显示带有 tmap 的 RasterBrick
- javascript - 如何配置为带有 react-to-print 的热敏纸打印机进行打印?
- c++ - C++17 中带有 ref-qualifier 的结构化绑定的差异编译器输出
- python - 谷歌应用引擎(python)不显示图像
- aws-lambda - Terraform 不会删除 CloudWatch 规则
- c# - 使螺旋星系臂末端密度降低的公式
- java - 如何进入所需的标签。XML
- python - 使用用户输入的数字三角形