mysql
lệnh có thể xuất ra XML trực tiếp, sử dụng - -xml
tùy chọn này có sẵn ít nhất là trước MySql 4.1.
Tuy nhiên, điều này không cho phép bạn tùy chỉnh cấu trúc của đầu ra XML. Nó sẽ xuất ra một cái gì đó như thế này:
<?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>
Và bạn muốn:
<?xml version="1.0"?>
<orders>
<employee emp_id="129">
<customer cust_id="107" region="Eastern"/>
</employee>
</orders>
Việc chuyển đổi có thể được thực hiện với XSLT bằng cách sử dụng một tập lệnh như sau:
<?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>
Điều này rõ ràng là dài dòng hơn so với cú pháp MSSQL ngắn gọn, nhưng mặt khác, nó mạnh hơn rất nhiều và có thể thực hiện tất cả những điều mà trong MSSQL không thể thực hiện được.
Nếu bạn sử dụng bộ xử lý XSLT dòng lệnh như xsltproc
hoặc saxon
, bạn có thể chuyển đầu ra của mysql
trực tiếp vào chương trình XSLT. Ví dụ:
mysql -e 'select * from table' -X database | xsltproc script.xsl -