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)
将 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)
| 归档时间: |
|
| 查看次数: |
24593 次 |
| 最近记录: |