2016-03-30 6 views
2

MariaDBデータベースから、DBサーバーにアクセスできないマシン上で動作するサードパーティプログラムにデータを取得しようとしているため、フラットテキストファイル。MySQL XML出力フィールド名を使用可能なタグ名に変換する

CSVはオプションではありません。データを読み取るプログラムがエスケープや引用でうまく動作しないためです。

私は今のところXMLに固執しています。幸いにも、MySQL、またはMariaDBは、mysqlmysqldumpコマンドラインツールの両方で--xmlパラメータを使用できます。

は、しかし、すべての列が属性名= 「COLUMN_NAME」と名「フィールド」を持っている:それを理解できるように、このデータを読み込むプログラムの場合

shell> mysql --xml -uroot -e "SHOW VARIABLES LIKE 'version%'" 
<?xml version="1.0"?> 

<resultset statement="SHOW VARIABLES LIKE 'version%'" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<row> 
<field name="Variable_name">version</field> 
<field name="Value">5.0.40-debug</field> 
</row> 

<row> 
<field name="Variable_name">version_comment</field> 
<field name="Value">Source distribution</field> 
</row> 

、私がすることを必要とします次の形式で:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" encoding="UTF-8"/> 

<xsl:template match="@*|node()"> 
    <xsl:copy> 
    <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="field[@name]"> 
    <xsl:element name="{@name}"> 
    <xsl:value-of select="."/> 
    </xsl:element> 
</xsl:template> 

</xsl:stylesheet> 

<row> 
<Variable_name>version</Variable_name> 
<Value>5.0.40-debug</Value> 
</row> 

<row> 
<Variable_name>version_comment</Variable_name> 
<Value>Source distribution</Value> 
</row> 

私はこれを変換する小さなXSLTスタイルシートを書かれています

これは動作しますが、Xalan C++をコマンドラインから使用して大規模なデータセット(100kレコード、2M行のXML)に対しては非常に遅いです。 15〜30分かかることがあります。

これを行うより良い方法はありますか?これらの一般的なタグ名ではなく、通常のタグ名を使用してXMLを出力するようMySQL/MariaDBに指示することはできません。また、エクスポート後に翻訳する必要があります。

+0

データを読み取るプログラムについて詳しく教えてください。 –

+0

いくつかのデータをQlikviewにインポートする必要があります。これはXML/CSV形式ではいくらか制限されています。悲しいことに、ODBCを介した直接接続の推奨方法はオプションではありません。 – ChrisDekker

+0

処理を高速化するために、 ''の後に ''をXSLTに追加します。もう1つの解決策は、データベースに接続し、行を反復してdom XMLファイルを作成する汎用言語(Java、PHP、Python)を使用することです。 – Parfait

答えて

関連する問題