You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在XML中按属性值选取文本值?SQL中获取XML指定属性文本

针对XML属性值选取文本的解决方案

一、通用XML文档的查询方法(基于XPath)

如果是通用的XML处理场景(比如用Python的lxml、Java的DOM解析等),你可以用XPath表达式精准定位目标元素:

  • 核心表达式://df[@name="EffectiveDate"]/text()
    • //df:匹配文档中所有名为df的元素
    • [@name="EffectiveDate"]:过滤出name属性值等于EffectiveDate的df元素
    • /text():提取该元素的文本内容

举个Python示例(用lxml库):

from lxml import etree

xml_content = '<xml> <entity> <sdfs> <df name="EffectiveDate">2/9/2015</df> </sdfs> </entity> </xml>'
root = etree.fromstring(xml_content)
result = root.xpath('//df[@name="EffectiveDate"]/text()')[0]
print(result)  # 输出:2/9/2015

二、SQL中针对给定XML文档的查询方案

不同SQL数据库处理XML的函数略有差异,下面针对主流数据库给出实现:

1. SQL Server

使用value()方法结合XQuery提取文本:

DECLARE @xml XML = '<xml> <entity> <sdfs> <df name="EffectiveDate">2/9/2015</df> </sdfs> </entity> </xml>'
SELECT 
    @xml.value('(/xml/entity/sdfs/df[@name="EffectiveDate"])[1]', 'varchar(50)') AS EffectiveDate
  • 注意:value()要求XPath返回单个节点,所以加[1]确保只取第一个匹配元素,第二个参数是返回值的数据类型。

2. MySQL

使用ExtractValue()函数:

SET @xml = '<xml> <entity> <sdfs> <df name="EffectiveDate">2/9/2015</df> </sdfs> </entity> </xml>';
SELECT 
    ExtractValue(@xml, '//df[@name="EffectiveDate"]/text()') AS EffectiveDate;
  • ExtractValue()的第二个参数就是XPath表达式,直接返回匹配到的文本内容。

3. PostgreSQL

使用xpath()函数,该函数返回文本数组,取第一个元素即可:

SELECT 
    (xpath('//df[@name="EffectiveDate"]/text()', '<xml> <entity> <sdfs> <df name="EffectiveDate">2/9/2015</df> </sdfs> </entity> </xml>'::xml))[1] AS EffectiveDate;
  • 需要先将字符串转换为xml类型,再通过[1]提取数组中的第一个结果。

内容的提问来源于stack exchange,提问作者Prawin Arumugam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 16:12:46