我是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);"
答案 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>