Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Sqlserver中的xml列获取指定属性_Xml_Xquery Sql - Fatal编程技术网

如何从Sqlserver中的xml列获取指定属性

如何从Sqlserver中的xml列获取指定属性,xml,xquery-sql,Xml,Xquery Sql,我的数据库中有一个名为MessageContent的xml列,如下所示: <ns1:ProductAvailabilityPublication xmlns:ns0="http://www.example.com/Ecommerce/Worldwide/AvailabilityService/Schemas/ProductResponse" xmlns:ns2="http://www.example.com/Ecommerce/Worldwide/AvailabilityService/S

我的数据库中有一个名为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>

现在我想找出curriv>0和D-flag=True记录中的所有ProductNumber。我试过了,但只能找到包含不需要的数据的整个xml列。是否可以计算出满足我的表达式的所有ProductNumber?

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

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

人们怎么知道你所说的ProductNumber、Curriv和D-flag的位置?发布示例XML,并根据该示例进行解释,以使您的问题易于理解。很抱歉,在添加代码标记时,我不知道如何在代码中添加换行符,但根本没有任何换行符。您最好只发布XML,使用{}工具缩进4个空格。