2010-10-01 11 views
9

tenga en cuenta los siguientes:Método de consulta XML de SQL Server 2008: ¿recupera el valor de texto() donde existe otro valor de texto()?

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()') 

Devuelve:

Expiry Date 

en lugar de recuperar el nodo <DataType/> texto cómo puedo recuperar el nodo a <Value/> texto donde el valor de nodo de texto de <DataType/> es "Fecha de Vencimiento "¿?"

Respuesta

12

Prueba esto:

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

selecciona cualquier nodo <Data> que tiene la <DataType>Expiry Date</DataType>, y para ese nodo, se selecciona es <Value> texto interno.

+0

Spot on - Thanks Marc –

Cuestiones relacionadas