【问题标题】:Parse XML in SQL Server 2016在 SQL Server 2016 中解析 XML
【发布时间】:2018-03-14 18:39:12
【问题描述】:

我需要有关为什么我收到两个空值作为“结果”而不是收到“已批准”文本的指导?

DECLARE @xml XML

SET @xml = '<Process>
                <DataArea>      
                    <UserArea>
                        <Property>
                            <ChildProperty name="Decision" type="StringType">Approved</ChildProperty>
                        </Property>
                        <Property>
                            <ChildProperty name="somethingelse" type="StringType">somethingelsevalue</ChildProperty>
                        </Property>
                    </UserArea>
                </DataArea> 
            </Process>' 

SELECT
    b.value('(/ChildProperty[@name="Decision"]/text())[1]', 'VARCHAR(100)') AS result
FROM   
    @xml.nodes('/Process/DataArea/UserArea/Property') AS a(b)

【问题讨论】:

  • XML 支持高度特定于供应商 - 所以请添加标签以指定您是否使用mysqlpostgresqlsql-serveroracledb2 - 或完全不同的东西。
  • @marc_s 更新标题。
  • @marc_s 更新标签。

标签: xml sql-server-2016


【解决方案1】:

您已经非常接近了 - 您只需确保 在计算 ChildProperty 的表达式中再次从根中选择。

将您的代码更改为:

SELECT
    b.value('(ChildProperty[@name="Decision"]/text())[1]', 'VARCHAR(100)') AS result
FROM   
    @xml.nodes('/Process/DataArea/UserArea/Property') AS a(b)

你有这个:

b.value('(/ChildProperty[@name="Decision"]/

注意/ 之前的ChildProperty - 这将从根开始搜索。您需要在您所在的上下文中搜索 - 所以我删除了示例中的前导斜杠。

【讨论】:

  • 谢谢,它成功了。感谢您澄清“/”行为。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-28
  • 2013-03-18
  • 1970-01-01
  • 1970-01-01
  • 2013-01-18
相关资源
最近更新 更多