2011-09-01 5 views
5

出力はテキストですが元のxmlも含む変換を作成しようとしています。単純に私はSQLインサートに変換する必要があるxmlメッセージを持っていますが、SQLエラーの場合は元のXMLメッセージをデータベースにも挿入したいのです。XSLT - テキスト出力モードで元のXMLを変換結果に配置する方法

入力は、例えば次のとおりです。

<message><tag name="foo">dummy</tag></message> 

変換の結果は、その後、次のようになります。

INSERT INTO table (column) VALUES ('dummy') 
IF @@error <> 0 
BEGIN 
    INSERT INTO errMsgLog (message) VALUES ('<message><tag name="foo">dummy</tag></message>') 
END 

問題は、私は「テキスト」にXSLTで出力を設定した場合、一切のxmlがないですタグが含まれています(値のみ)。どのような混合出力モードまたは属性のオーバーライドがありますか?

ありがとうございました。

答えて

4

このソリューションに近づく前に(XSLTを通してもっと良い解決策が見つかるかどうかわからない)、はるかに複雑な入力と出力で遭遇する問題も考慮してください。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output omit-xml-declaration="yes"/>  
    <xsl:strip-space elements="*"/> 

    <xsl:template match="/"> 
     <xsl:text disable-output-escaping="yes">INSERT INTO table (column) VALUES ('dummy') 
IF @@error &lt;> 0 
BEGIN 
    INSERT INTO errMsgLog (message) VALUES ('</xsl:text> 
     <xsl:copy-of select="."/><xsl:text>') 
END</xsl:text> 
    </xsl:template> 

</xsl:stylesheet> 

出力:

INSERT INTO table (column) VALUES ('dummy') 
IF @@error <> 0 
BEGIN 
    INSERT INTO errMsgLog (message) VALUES ('<message><tag name="foo">dummy</tag></message>') 
END 
+0

ありがとうございました。私がしなければならなかったのは、出力モードをまったく設定しないことでした(omit-xml-declaration = "yes"のみ)。 –

+0

私の例のようにはい。これは、xmlがデフォルトの出力方法であるためです。 –

1

純粋主義者は(も質問)この回答を拒否されます場合でも、あなたは(非常に醜い)トリックを行うには、 "XML" 出力方法を使用することができます

いくつかのプロセッサー(Saxonなど)には、XMLノードをシリアル化されたXML表現に変換するための関数serialize()があります。この関数は文字列として戻ります。これを呼び出してテキスト結果に出力することができます。あなたのプロセッサがそのような拡張機能を持っていない場合、それを書くのは難しくないかもしれません。

+0

** [良いスレッド](http://stackoverflow.com/questions/6696382/xslt-how-to-convert-xml-node-to-string)**これについては、私が@Michaelが何を示唆しているか理解する(+1) –