Разбор XML с пространством имен в SQL Server 2008 - PullRequest
0 голосов
/ 09 июня 2018

У меня есть следующий XML в моей таблице.Я хочу получить ID узла fv: <fv ID="Description"> или нет

<DataFormItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="bb_appfx_dataforms">
  <Values>
    <fv ID="JobInterval">
      <Value xsi:type="xsd:int">10</Value>
    </fv>
    <fv ID="JobEnabled">
      <Value xsi:type="xsd:boolean">false</Value>
    </fv>
    <fv ID="JobName">
      <Value xsi:type="xsd:string">Default transactional email process</Value>
    </fv>
    <fv ID="ScheduleFrequencySubDayType">
      <Value xsi:type="xsd:int">2</Value>
    </fv>
  </Values>
</DataFormItem>

1 Ответ

0 голосов
/ 09 июня 2018

Если ваша таблица называется YourTable, а столбец XML называется XmlData (адаптируйте и измените ее в соответствии с вашей реальной ситуацией!), Вы можете попробовать этот код XQuery:

-- declare the XML namespace as the DEFAULT
;WITH XMLNAMESPACES(DEFAULT 'bb_appfx_dataforms')
    SELECT
        -- extract the value from the <Value> subnode of the <fv> node, if found
        FvValue = XC.value('(Value)[1]', 'varchar(200)')
    FROM
        dbo.YourTable
    CROSS APPLY
        -- get a list of XML fragments - one for each <fv> node
        XmlData.nodes('/DataFormItem/Values/fv') AS XT(XC)
    WHERE
        -- find the XML fragment with the ID="Description"
        XC.value('@ID', 'varchar(50)') = 'Description'
...