MySQL如何将SQL查询结果转换为属性格式XML而非嵌套标签格式
实现方案
MySQL 没有和 SQL Server XML AUTO 完全对等的内置语法,但可以通过两种方式实现属性格式的XML输出:
方案1:使用内置XML函数(推荐)
MySQL 5.1及以上版本支持XMLELEMENT和XMLATTRIBUTES原生XML函数,会自动处理特殊字符转义,无需手动处理格式问题,示例代码如下:
SELECT XMLELEMENT( NAME `period_sid`, XMLATTRIBUTES( period_sid, PROJECTION_SALES, PROJECTION_UNITS, ACCOUNT_GROWTH, PRODUCT_GROWTH ) ) AS xml_output FROM 你的表名 WHERE period_sid = 1802;
执行后输出的格式和你要求的完全一致:<period_sid period_sid="1802" PROJECTION_SALES="1595642.121" PROJECTION_UNITS="18834.75725" ACCOUNT_GROWTH="0" PRODUCT_GROWTH="0"/>
如果需要批量导出多行记录的XML节点,可以用GROUP_CONCAT拼接结果:
SELECT GROUP_CONCAT( XMLELEMENT( NAME `period_sid`, XMLATTRIBUTES( period_sid, PROJECTION_SALES, PROJECTION_UNITS, ACCOUNT_GROWTH, PRODUCT_GROWTH ) ) SEPARATOR '\n' ) AS xml_output FROM 你的表名;
方案2:手动字符串拼接
如果有特殊定制需求,也可以手动拼接字符串实现,注意用QUOTE函数处理值的引号和基础转义:
SELECT CONCAT( '<period_sid ', 'period_sid=', QUOTE(period_sid), ' ', 'PROJECTION_SALES=', QUOTE(PROJECTION_SALES), ' ', 'PROJECTION_UNITS=', QUOTE(PROJECTION_UNITS), ' ', 'ACCOUNT_GROWTH=', QUOTE(ACCOUNT_GROWTH), ' ', 'PRODUCT_GROWTH=', QUOTE(PRODUCT_GROWTH), '/>' ) AS xml_output FROM 你的表名;
如果字段值包含&、<、>等XML特殊字符,需要额外用REPLACE函数转义后再拼接:
&替换为&<替换为<>替换为>"替换为"'替换为'
如果需要输出完整XML文档,在结果前后补充XML声明和根节点即可。
内容的提问来源于stack exchange,提问作者KittySkin
相关产品推荐
相关产品推荐

