如何在Microsoft SQL中提取XML内ResponseDescription的纯文本值?
提取XML中转义子节点的纯文本值
你的查询返回带标签的内容,核心原因是<detail>节点里的内容是转义后的XML字符串(用</>转义了标签),并非原生XML节点。要拿到纯文本,需要分两步处理转义内容:
修改后的查询语句:
WITH XMLNAMESPACES('http://google.com/' AS soap, 'http://stackoverflow.com/' AS ns2) SELECT timeSent, accountNo, isSuccessful, -- 1. 提取detail里的转义XML字符串并转换为XML对象 TRY_CONVERT(xml, TRY_CONVERT(xml, responsePayload).value('/soap:Envelope/soap:Body/ns2:response/detail[1]', 'nvarchar(max)')) -- 2. 从还原后的XML中提取ResponseDescription的纯文本 .value('(/LoanProcessResponse/ResponseDescription)[1]', 'nvarchar(max)') AS response from my_table where accountNo = '000000008' ORDER BY timesent desc;
关键说明:
- 替换
.query()为.value():.query()返回XML片段,.value()直接返回标量文本值,满足你获取纯文本的需求。 - 处理转义XML:先通过外层XML的
.value()提取<detail>内的转义字符串,再用TRY_CONVERT(xml, ...)将其还原为可解析的XML对象,最后从该对象中提取目标文本。
内容的提问来源于stack exchange,提问作者Ibuqun
相关产品推荐
相关产品推荐

