MySQL的XML输出

Num*_*our 9 xml mysql database sqlxml

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

我指的是MSSQL与SQL-XML插件之类的东西,例如:

SELECT * FROM table WHERE 1 FOR XML AUTO
Run Code Online (Sandbox Code Playgroud)

返回文本(或精确的MSSQL中的xml数据类型),其中包含根据表中的列生成的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
Run Code Online (Sandbox Code Playgroud)

它生成如下的XML代码:

<employee emp_id='129'>
   <customer cust_id='107' region='Eastern'/>
</employee>
Run Code Online (Sandbox Code Playgroud)

你有任何线索如何在MySQL中实现这一点吗?

提前感谢您的回答.

Nei*_*hew 11

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>
Run Code Online (Sandbox Code Playgroud)

你想要:

<?xml version="1.0"?>
<orders>
  <employee emp_id="129">
    <customer cust_id="107" region="Eastern"/>
  </employee>
</orders>
Run Code Online (Sandbox Code Playgroud)

可以使用如下脚本使用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>
Run Code Online (Sandbox Code Playgroud)

这显然比简洁的MSSQL语法更冗长,但另一方面它更强大,可以做各种在MSSQL中无法实现的事情.

如果使用命令行XSLT处理器(如xsltprocor)saxon,则可以将输出mysql直接传递给XSLT程序.例如:

mysql -e 'select * from table' -X database | xsltproc script.xsl -
Run Code Online (Sandbox Code Playgroud)


sol*_*oth 2

将 XML 与 MySQL 结合使用似乎是一个很好的起点,可以从 MySQL 查询到 XML 的各种不同方法入手。

来自文章:

   use strict;
   use DBI;
   use XML::Generator::DBI;
   use XML::Handler::YAWriter;

   my $dbh = DBI->connect ("DBI:mysql:test",
                           "testuser", "testpass",
                           { RaiseError => 1, PrintError => 0});
   my $out = XML::Handler::YAWriter->new (AsFile => "-");
   my $gen = XML::Generator::DBI->new (
                                   Handler => $out,
                                   dbh => $dbh
                               );
   $gen->execute ("SELECT name, category FROM animal");
   $dbh->disconnect ();
Run Code Online (Sandbox Code Playgroud)