从 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)')
也许是这样的?
我想从 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)')
也许是这样的?