SQL Server中XPath可选元素处理:兼容两种XML布局导入
解决OPENXML兼容新旧XML布局的问题
要让OPENXML同时适配带event3/event4和不带这两个节点的XML布局,可以通过合并两种XPath路径的方式实现,直接在OPENXML的第二个参数中用|分隔两种合法路径:
FROM OPENXML(@idoc, N'ROOT/event1/event2/event3/event4/event5/event6 | ROOT/event1/event2/event5/event6')
核心逻辑
- 竖线
|是XPath的路径联合操作符,会同时匹配符合任意一条路径的节点 - 第一条路径对应2022年10月之后的新布局(包含event3/event4)
- 第二条路径对应旧布局(直接从event2跳转至event5)
额外建议
- 确保两种布局中
event6的子节点、属性定义完全一致,否则导入时可能出现字段值缺失或错位 - 如果XML结构层级固定且无同名节点干扰,也可以用XPath的
//轴简化路径(但精度略低):
该写法会匹配FROM OPENXML(@idoc, N'ROOT/event1/event2//event5/event6')event2节点下所有后代层级中的event5/event6组合。
内容的提问来源于stack exchange,提问作者fmbra
相关产品推荐
相关产品推荐

