使用xslt基于xml标记的动态插入查询

时间:2015-12-14 16:41:59

标签: xml xslt xpath

我是Xpath和XSLT的新手。 我想基于my XML中的元素标签动态构造一个插入查询。

例如我有一个xml:

<emp>    
    <name>Harry</name>    
    <empcode>IT142</empcode>    
    <dept>IT</dept>    
</emp>   

所以结果应该是

"insert into emp(name,empcode,dept) values(Harry,IT142,IT);"

2 个答案:

答案 0 :(得分:2)

下面的样式表不依赖于任何实际的元素名称,而只依赖于元素的位置。使用xsl:text插入固定字符串,使用for-each遍历emp的子元素两次。

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"/>

    <xsl:template match="/">
      <xsl:text>"INSERT INTO </xsl:text>
      <xsl:value-of select="name(*)"/>

      <xsl:text>(</xsl:text>
      <xsl:for-each select="*/*">
          <xsl:value-of select="name()"/>
          <xsl:if test="position() != last()">
              <xsl:text>, </xsl:text>
          </xsl:if>
      </xsl:for-each>
      <xsl:text>)</xsl:text>

      <xsl:text> values(</xsl:text>
      <xsl:for-each select="*/*">
          <xsl:value-of select="."/>
          <xsl:if test="position() != last()">
              <xsl:text>, </xsl:text>
          </xsl:if>
      </xsl:for-each>
      <xsl:text>);"</xsl:text>
    </xsl:template>

</xsl:transform>

文字输出

"INSERT INTO emp(name, empcode, dept) values(Harry, IT142, IT);"

我假设""应该是输出的一部分。在线试用此解决方案here

答案 1 :(得分:0)

在xml下面找到xslt来生成给定的输出。 如果您需要更改,请根据您的要求进行更改。

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
            xmlns:xs="http://www.w3.org/2001/XMLSchema"
            version="2.0">
    <xsl:output method="text" encoding="UTF-8"/>
    <xsl:template match="//emp">
        <xsl:value-of select="concat('insert into emp(name,empcode,dept) values(', name, ',', empcode, ',',dept ,');')" />
    </xsl:template>
</xsl:stylesheet>