如何在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
相关产品推荐
相关产品推荐

