【问题标题】:How to get specified attributes from an xml column in Sqlserver如何从 Sql Server 中的 xml 列中获取特定属性
【发布时间】:2014-07-23 10:19:37
【问题描述】:

我的数据库中有一个名为 MessageContent 的 xml 列:

<ns1:ProductAvailabilityPublication xmlns:ns0="http://www.example.com/Ecommerce/Worldwide/AvailabilityService/Schemas/ProductResponse" xmlns:ns2="http://www.example.com/Ecommerce/Worldwide/AvailabilityService/Schemas/ProductRequest" xmlns:ns1="http://www.example.com/Ecommerce/Worldwide/AvailabilityService/Schemas/ProductAvailabilityPublish" RequestorID="WCS_AU" BatchID="36dae836-cc16-489c-8009-afab63f92dff">
  <ns0:ProductResponse ProductNumber="C8010A" LeadTime="1" LastUpdated="2014-07-18T11:17:47.677" Region="AP" CountryCode="AU" CurrInv="259" FutureInv="0" CurrEDD="TBA" FutureEDD="TBA" ETA="0" D-Flag="True">
    <ns0:ProductType>
      <ns2:NonStartingPoint />
    </ns0:ProductType>
    <ns0:Status>
      <ns0:Success />
    </ns0:Status>
  </ns0:ProductResponse>
  <ns0:ProductResponse ProductNumber="Q3655A" LeadTime="1" LastUpdated="2014-07-18T11:17:47.677" Region="AP" CountryCode="AU" CurrInv="2" FutureInv="0" CurrEDD="TBA" FutureEDD="TBA" ETA="0" D-Flag="True">
    <ns0:ProductType>
      <ns2:NonStartingPoint />
    </ns0:ProductType>
    <ns0:Status>
      <ns0:Success />
    </ns0:Status>
  </ns0:ProductResponse>
  <ns0:ProductResponse ProductNumber="PP654A" LeadTime="21" LastUpdated="2014-07-18T11:17:47.677" Region="AP" CountryCode="AU" CurrInv="0" FutureInv="0" CurrEDD="TBA" FutureEDD="TBA" ETA="0" D-Flag="False">
    <ns0:ProductType>
      <ns2:NonStartingPoint />
    </ns0:ProductType>
    <ns0:Status>
      <ns0:Success />
    </ns0:Status>
  </ns0:ProductResponse>

</ns1:ProductAvailabilityPublication>

现在我想找出 "CurrInv">0 和 "D-flag"="True" 记录中的所有 "ProductNumber"。我试过了,但只能找出包含不需要数据的整个 xml 列。能不能算出所有的“ProductNumber”来满足我的表达方式?

【问题讨论】:

  • 人们应该如何知道您所说的 ProductNumber、CurrInv 和 D-flag 的位置?发布示例 XML 并根据该示例进行解释,以使您的问题易于理解。
  • 对不起,我不知道如何在代码中添加换行符,因为我添加了代码降价,但根本没有任何换行符。
  • 您最好只发布 XML,使用 {} 工具缩进 4 个空格。

标签: xml xquery-sql


【解决方案1】:

以下 XQuery 应该可以工作。您需要绑定正确的命名空间(或使用命名空间通配符* 而不是特定的命名空间):

//ns0:ProductResponse[@CurrInv > 0][@D-Flag = "True"]/@ProductNumber/string()

【讨论】:

    猜你喜欢
    • 2010-12-06
    • 1970-01-01
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多