如何从XML列获取元素值?

时间:2017-03-09 02:38:15

标签: sql sql-server xml xpath sql-server-2005

我在下面的列中有XML。我需要到\ Report \ Criterias \ Criteria(其中name =" Advertisers")\ Elements \ Element(其中name =" ListViewAvailable")。从这里我需要列出Value元素中的所有数字。

到目前为止,我得到了:

SELECT xmlColumn.query('/Report/Criterias/Criteria/Elements/Element')
from tbl

但不知道如何过滤。

<Report>
  <Criterias>
    <Criteria name="Date Range">
        ...
    </Criteria>

    <Criteria name="Advertisers">
      <Elements>
        <Element name="CheckBoxOne">
          <Value>0</Value>
        </Element>
        <Element name="ListViewAvailable">
          <Value>314</Value>
          <Value>57</Value>
          <Value>18886</Value>
          <Value>7437</Value>
        </Element>
      </Elements>
    </Criteria>
    <Criteria name="Revenue Types">
      ...
    </Criteria>
  </Criterias>
</Report>    

1 个答案:

答案 0 :(得分:2)

您可以使用谓词([])与CROSS APPLY结合使用来过滤Value元素级别的XML:

SELECT C.value('.', 'int') AS Value
FROM tbl t
CROSS APPLY t.xmlColumn.nodes('
    /Report/Criterias/Criteria[@name="Advertisers"]
    /Elements/Element[@name="ListViewAvailable"]
    /Value
') T(C)