gpt4 book ai didi

mysql - MySQL 查询的 XML 输出

转载 作者:可可西里 更新时间:2023-11-01 06:29:05 26 4
gpt4 key购买 nike

是否有可能将 MySQL 查询的输出直接转换为 XML?

我指的是类似 MSSQL 的 SQL-XML 插件,例如:

SELECT * FROM table WHERE 1 FOR XML AUTO

返回包含生成的 XML 标记结构的文本(准确地说是 MSSQL 中的 xml 数据类型)根据表中的列。

对于 SQL-XML,还有一个显式定义输出 XML 结构的选项,如下所示:

SELECT
1 AS tag,
NULL AS parent,
emp_id AS [employee!1!emp_id],
cust_id AS [customer!2!cust_id],
region AS [customer!2!region]
FROM table
FOR XML EXPLICIT

生成如下 XML 代码:

<employee emp_id='129'>
<customer cust_id='107' region='Eastern'/>
</employee>

你知道如何在 MySQL 中实现这个吗?

预先感谢您的回答。

最佳答案

mysql 命令可以直接输出XML,使用--xml选项,至少可以追溯到 MySql 4.1。

但是,这不允许您自定义 XML 输出的结构。它将输出如下内容:

<?xml version="1.0"?>
<resultset statement="SELECT * FROM orders" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<row>
<field name="emp_id">129</field>
<field name="cust_id">107</field>
<field name="region">Eastern</field>
</row>
</resultset>

你想要:

<?xml version="1.0"?>
<orders>
<employee emp_id="129">
<customer cust_id="107" region="Eastern"/>
</employee>
</orders>

转换可以用 XSLT 完成使用这样的脚本:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:template match="resultset">
<orders>
<xsl:apply-templates/>
</orders>
</xsl:template>

<xsl:template match="row">
<employee emp_id="{field[@name='emp_id']}">
<customer
cust_id="{field[@name='cust_id']}"
region="{field[@name='region']}"/>
</employee>
</xsl:template>

</xsl:stylesheet>

这显然比简洁的 MSSQL 语法更冗长,但另一方面它更强大,可以完成 MSSQL 无法完成的各种事情。

如果您使用命令行 XSLT 处理器,例如 xsltprocsaxon,您可以将 mysql 的输出直接传送到 XSLT程序。例如:

mysql -e 'select * from table' -X database | xsltproc script.xsl -

关于mysql - MySQL 查询的 XML 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2847674/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com