首页 > 解决方案 > 当文件结构发生变化时,如何在 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

标签: sqlsql-serverxmltsqlxpath

解决方案


使用这个 xpath。它将匹配属性匹配“结果”v的所有元素:id

SELECT
    a.XmlResponse.value('(//v[@id="Outcome"])[1]', 'varchar(100)')
FROM t

推荐阅读