【问题标题】:Get element value from XML datatype field从 XML 数据类型字段中获取元素值
【发布时间】:2015-03-19 18:31:35
【问题描述】:

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

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 

【问题讨论】:

    标签: sql sql-server-2008


    【解决方案1】:

    您过度使用 PD 命名空间(为什么是 PD 顺便说一句?),“传输”telement 没有命名空间。此外,要选择属性,请在属性名称前使用 @ 符号:)

    试试这个:

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

    结果:

    file1*.csv
    

    【讨论】:

      【解决方案2】:
      select @xml.value('(/stylesheet/variable/transport/@filename)[1]', 'nvarchar(max)')
      

      也许是这样的?

      【讨论】:

      • 我已经尝试过,但没有工作。此代码不适用于样式表 xmls。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-10
      • 1970-01-01
      • 2023-02-23
      • 1970-01-01
      • 2020-09-28
      • 1970-01-01
      相关资源
      最近更新 更多