sql-server - SQL Server : How do I check if an element attribute of an xml node contains a specific string?

标签 sql-server xml xpath

我有一个像这样的 xml 文档。

<Students>
  <Student>
    <Node Type="http://www.something.com/xyz/10/abc/RollNumber" 
          Value="Original=10000;Modified=100003445" />
    <Node Type="http://www.something.com/xyz/10/abc/SerialNumber" 
          Value="Original=10000;Modified=172777" />
    <Node Type="http://www.something.com/xyz/10/abc/Stream" 
          Value="Original=CS;Modified=EC" />
  </Student>
</Students>

要获取流的值,我可以这样写:

Select @MyXML.value('(/Students/Student/Node[@Type="http://www.something.com/xyz/10/abc/Stream"]/@Value)[1]', 'varchar(100)') AS ChangedValue

我的问题是 url 部分可能会改变,因此我想根据一些标准来匹配它,例如

@Type = "%Stream"

@Type.Contains("Stream")

可能吗?

最佳答案

SQL 中的 xpath 引擎支持 contains 函数,因此您可以说:

SELECT
    @MyXML.value('(/Students/Student/Node[contains(@Type,"Stream")]/@Value)[1]',
                 'varchar(100)') 
    AS ChangedValue

但是不幸的是,明显的 ends-with() 是一个 xpath 2.0 函数,而 SQL 引擎不提供该功能,因此如果您想测试您必须说的 Stream 结尾的字符串(按照 this post ):

SELECT
    @MyXML.value
   ('(/Students/Student/Node["Stream"
                = substring(@Type, string-length(@Type)-5)]/@Value)[1]',
     'varchar(100)') 
    AS ChangedValue

关于sql-server - SQL Server : How do I check if an element attribute of an xml node contains a specific string?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9031344/

相关文章:

c# - 为什么 SqlDataReader to DataTable 只有在我使用单独的字段时才有效?

sql - 值可以是主键和外键吗?

java xpath 返回意外值

python - 如何在 Glassdoor 上使用 Selenium 和 Python 访问 iframe

sql-server - 如何使用 SQL 从 Active Directory 获取多值数据

sql-server - SQL Server BCP 将二进制文件导出到文件 : extra data at the begining of the file

xml - 使用 UPDATEXML 更新 Oracle 中的 XML

javascript - 无法理解为什么 replace() 在这里不起作用

xml - 使用 XSLT 计算差异

python - Python xpath中如何处理单引号和双引号