从XML数据类型字段获取元素值

时间:2015-01-21 09:38:10

标签: sql sql-server-2008

我想从XML数据字段中检索元素值。请查看以下代码段以获取更多详细信息:

SQL脚本:

CREATE TABLE #Temp1 (ConfigXSLT XML);

INSERT INTO #Temp1 VALUES('<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes" />
  <xsl:variable name="transport">
    <transport protocol="FILE" direction="get" filename="file1*.csv" />
  </xsl:variable>
  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()" />
    </xsl:copy>
  </xsl:template>
</xsl:stylesheet>')

-- I want only filename element value 'file1*.csv' in select statement

-- I have tried with below query but it not works
SELECT ConfigXSLT.value('declare namespace PD="http://www.w3.org/1999/XSL/Transform"; (//PD:variable/PD:transport/PD:filename)[1]','VARCHAR(MAX)') 
FROM #Temp1

DROP TABLE #Temp1 

2 个答案:

答案 0 :(得分:3)

你过分使用PD命名空间(为什么PD btw?),&#34; transport&#34;电视没有命名空间。另外,要选择属性,请在属性名称前使用@符号:)

试试这个:

SELECT ConfigXSLT.value('declare namespace PD="http://www.w3.org/1999/XSL/Transform"; (//PD:variable/transport/@filename)[1]','VARCHAR(MAX)') 
FROM #Temp1

结果:

file1*.csv

答案 1 :(得分:0)

select @xml.value('(/stylesheet/variable/transport/@filename)[1]', 'nvarchar(max)')

也许是这样的?