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

Get element value from XML datatype field

我想从 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 

您在使用 PD 命名空间方面做得太过火了(顺便说一句,为什么是 PD?),"transport" 元素没有命名空间。此外,对于 select 属性,您在属性名称前使用 @ 符号 :)

试试这个:

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

结果:

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

也许是这样的?