sql - 当文件结构发生变化时,如何在 SQL 中解析 XML?
问题描述
我在一列中有以下 XML 结构(这只是其中的一小部分):
<block name="decision">
<subdictionary name="main">
<v id="Profit">126.45</v>
<v id="Check">-99999.00</v>
<v id="RulePath">PD159</v>
<v id="ID">3256423</v>
<v id="Outcome">RejectFinal</v>
<v id="RP">,PD159</v>
</subdictionary>
</block>
我要做的是解析“结果”的结果,但对我来说,问题是对于每个不同的 xml 文件,“结果”的位置可能会改变。到目前为止我一直在尝试的是这个
SELECT
a.XmlResponse.value('(/decisiondocument/block[3]/subdictionary[1]/v)[@Outcome]', 'nvarchar(20)') 'Outcome'
FROM table
但它给出了以下错误:
XQuery [Table_Request.XmlResponse.value()]: 'value()' 需要一个单例(或空序列),找到类型为 'xdt:untypedAtomic *' 的操作数
期望的结果将是这样的:
Column Outcome
1 RejectFinal
2 Approved
3 RejectFinal
解决方案
使用这个 xpath。它将匹配属性匹配“结果”v
的所有元素:id
SELECT
a.XmlResponse.value('(//v[@id="Outcome"])[1]', 'varchar(100)')
FROM t
推荐阅读
- vb.net - EZTwain - 它也在哪里写文件?
- php - 如何在php中的对象中提取对象的数据?
- docker - 在composer中将主机名更改为docker可解析的主机名
- docker - 如何从 jenkins 管道编辑 Docker 映像中的 /etc/host
- java - 对于每个循环添加所有人口
- python - 从字典中提取数据
- java - 调用嵌套recyclerview适配器获取数据
- node.js - 如何在 index.js 文件中为 firebase-auth 提供服务密钥文件的路径?
- javascript - 如何在angularjs中创建一个简单的if then else?
- android - IllegalStateException:当我第二次尝试显示 AlertDialog 时