[英]How to transform xml to sql query using XSLT?
I have an xml file and i want to create sql query from it.我有一个 xml 文件,我想从中创建 sql 查询。 like below
像下面
OUTPUT NEEDED:
INSERT INTO 'table' values
('2','0','SUGAR_QTY','2','2')
('2','0','OIL_QTY','5','1')
<recConfig>
<default_rec>
<recid>
2
</recid>
<recname>
WHITE_BREAD
</recname>
<description>
</description>
<accesslevel>
0
</accesslevel>
<parameter>
<parameterCode>
SUGAR_QTY
</parameterCode>
<parameterValue>
2
</parameterValue>
<ordinal>
2
</ordinal>
</parameter>
<parameter>
<parameterCode>
OIL_QTY
</parameterCode>
<parameterValue>
5
</parameterValue>
<ordinal>
1
</ordinal>
</parameter>
</default_rec>
</recConfig>
THIS IS MY XSLT FILE这是我的 XSLT 文件
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text" encoding="UTF-8" indent="yes" />
<xsl:template match="/">
<xsl:text>"INSERT INTO 'recipe_parametrs'</xsl:text>
<xsl:text> values</xsl:text>
<xsl:for-each select="recConfig/default_rec">
<xsl:text>
</xsl:text>
<xsl:text> ('</xsl:text>
<xsl:value-of select="normalize-space(recid)"/>
<xsl:text>','</xsl:text>
<xsl:value-of select="normalize-space(accesslevel)"/>
<xsl:text>','</xsl:text>
<xsl:for-each select="parameter">
<xsl:value-of select="normalize-space(parameterCode)"/>
<xsl:text>','</xsl:text>
<xsl:value-of select="normalize-space(parameterValue)"/>
<xsl:text>','</xsl:text>
<xsl:value-of select="normalize-space(ordinal)"/>
<xsl:text>','</xsl:text>
</xsl:for-each>
<xsl:text>')</xsl:text>
</xsl:for-each>
<xsl:text>;</xsl:text>
</xsl:template>
</xsl:transform>
The output that I get is this我得到的输出是这个
"INSERT INTO 'recipe_parametrs' values
('2','0','SUGAR_QTY','2','2','OIL_QTY','5','1','');
I just started learning xslt yesterday.我昨天刚开始学习 xslt。 I dont know how separate SUGAR_QTY and OIL_QTY to different queries like shown in OUTPUT NEEDED: .
我不知道如何将 SUGAR_QTY 和 OIL_QTY 与不同的查询分开,如 OUTPUT NEEDED: 所示。 I understand that nested for loop is not the right way to do it.
我知道嵌套 for 循环不是正确的方法。 I know that the inside for loop should be replaced with some other logic.
我知道应该用其他一些逻辑替换内部的 for 循环。 I am not sure what to do .
我不知道该怎么办。
Can anyone please guide me on how to do it.任何人都可以请指导我如何做。
Thanks.谢谢。
How about something like:怎么样:
XSLT 1.0 XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8" indent="yes" />
<xsl:template match="/recConfig">
<xsl:text>INSERT INTO 'table' values </xsl:text>
<xsl:for-each select="default_rec">
<xsl:variable name="recid" select="recid" />
<xsl:variable name="accesslevel" select="accesslevel" />
<xsl:for-each select="parameter">
<xsl:text>(</xsl:text>
<xsl:for-each select="$recid | $accesslevel | parameterCode | parameterValue | ordinal">
<xsl:text>'</xsl:text>
<xsl:value-of select="normalize-space(.)"/>
<xsl:text>'</xsl:text>
<xsl:if test="position() != last()">
<xsl:text>,</xsl:text>
</xsl:if>
</xsl:for-each>
<xsl:text>) </xsl:text>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.