Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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
简单的xml.nodes t-sql查询不起作用_Xml_Tsql_Xpath_Xquery_Xml Namespaces - Fatal编程技术网

简单的xml.nodes t-sql查询不起作用

简单的xml.nodes t-sql查询不起作用,xml,tsql,xpath,xquery,xml-namespaces,Xml,Tsql,Xpath,Xquery,Xml Namespaces,福尔克斯,这里是xml: declare @xml xml = Cast('<asset_market_data_response xmlns="http://schemas.bcs.ru/marketing_data_service/in/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <system_block xm

福尔克斯,这里是xml:

declare @xml xml =
Cast('<asset_market_data_response xmlns="http://schemas.bcs.ru/marketing_data_service/in/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <system_block xmlns="http://schemas.bcs.ru/is/clipboard/">
    <originator>Bloomberg</originator>
    <mean_for>IS.Clipboard</mean_for>
    <document_id>e7aa2033-0a53-4390-a09b-504673ea54bb</document_id>
    <event>New</event>
    <event_time>2017-11-23T13:35:49.171696+03:00</event_time>
  </system_block>
  <common_block>
    <request_id>603bc973-39d0-e711-9417-984be16869ec</request_id>
  </common_block>
  <body>
    <date_request>2017-11-22T00:00:00</date_request>
    <data_request_code>bloomberg_bond</data_request_code>
    <data_source_code>Bloomberg</data_source_code>
    <data_version xsi:nil="true" />
    <error_message_source xsi:nil="true" />
    <asset_list>
      <asset>
        <common>
          <identifier>XS0114288789</identifier>
          <trading_floor_code xsi:nil="true" />
          <trading_floor_section_code>Equity</trading_floor_section_code>
          <trading_floor_board_code xsi:nil="true" />
        </common>
        <data_list>
          <data>
            <name>CRNCY</name>
            <value>USD</value>
          </data>
          <data>
            <name>PAR_AMT</name>
            <value>.475000000</value>
          </data>
        </data_list>
      </asset>
      <asset>
        <common>
          <identifier>CH0385518086</identifier>
          <trading_floor_code xsi:nil="true" />
          <trading_floor_section_code>Equity</trading_floor_section_code>
          <trading_floor_board_code xsi:nil="true" />
        </common>
        <data_list>
          <data>
            <name>CRNCY</name>
            <value>CHF</value>
          </data>
          <data>
            <name>PAR_AMT</name>
            <value>5000.000000000</value>
          </data>
        </data_list>
      </asset>
    </asset_list>
  </body>
</asset_market_data_response>' as xml)
但是它没有输出(列名称'identifier'&没有行)。我需要的是:


我的选择有什么问题?这很简单,我不知道哪里出了问题。可能是,xml本身存在一些问题?

发现xml本身存在问题。已删除以“/>”结尾的节点+xml架构引用:

set @chr =  Replace(
            Replace(
            Replace(
            Replace(
            Replace(
            Replace(
            Replace(@chr, ' xmlns="http://schemas.bcs.ru/marketing_data_service/in/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"', ''),
                          ' xmlns="http://schemas.bcs.ru/is/clipboard/"', ''),
                          '<data_version xsi:nil="true" />', ''),
                          '<error_message_source xsi:nil="true" />', ''),
                          '<trading_floor_code xsi:nil="true" />', ''),
                          '<trading_floor_board_code xsi:nil="true" />', ''),
                          '<value xsi:nil="true" />', '<value></value>')
这也有效:

select t.c.value('identifier[1]', 'varchar(50)') as identifier
from @xml.nodes('asset_market_data_response/body/asset_list/asset/common') t(c)
这也是:

select t.c.query('./identifier').value('.', 'varchar(50)') as identifier
from @xml.nodes('asset_market_data_response/body/asset_list/asset/common') t(c)

不,您不应该使用字符串方法来修复XML,这完全可以

您只需声明所涉及的名称空间:

WITH XMLNAMESPACES(DEFAULT 'http://schemas.bcs.ru/marketing_data_service/in/')
select c.value('(identifier/text())[1]', 'varchar(50)') as identifier
from @xml.nodes('asset_market_data_response/body/asset_list/asset/common') t(c);

名称空间声明有帮助!而且不需要那些“修理”的东西。谢谢你,Shnugo,太棒了!
select t.c.value('identifier[1]', 'varchar(50)') as identifier
from @xml.nodes('asset_market_data_response/body/asset_list/asset/common') t(c)
select t.c.query('./identifier').value('.', 'varchar(50)') as identifier
from @xml.nodes('asset_market_data_response/body/asset_list/asset/common') t(c)
WITH XMLNAMESPACES(DEFAULT 'http://schemas.bcs.ru/marketing_data_service/in/')
select c.value('(identifier/text())[1]', 'varchar(50)') as identifier
from @xml.nodes('asset_market_data_response/body/asset_list/asset/common') t(c);