SQL Server 2008 XML查询方法 - 检索另一个text()值存在的text()值?

tom*_*.do 9 xml sql-server-2008

请考虑以下事项:

DECLARE @xml  XML
SET @xml =
'<Capture>
<Data><DataType>Card Number</DataType><Value>1234567898765</Value></Data>
<Data><DataType>Expiry Date</DataType><Value>1010</Value></Data>
</Capture>'

SELECT @xml.query('//*[text()="Expiry Date"]/text()')
Run Code Online (Sandbox Code Playgroud)

返回:

Expiry Date
Run Code Online (Sandbox Code Playgroud)

而不是检索<DataType/>文本节点如何检索<Value/>文本节点值<DataType/>是"到期日期" 的文本节点?

mar*_*c_s 12

试试这个:

SELECT 
  @xml.value('(//Data[DataType="Expiry Date"]/Value/text())[1]', 'varchar(50)')
Run Code Online (Sandbox Code Playgroud)

您选择<Data>具有该节点的任何节点<DataType>Expiry Date</DataType>,并为该节点选择其<Value>内部文本.