使用xslt转换XML子元素结构

时间:2017-08-10 03:28:25

标签: xml xslt

我一直在尝试使用XSLT转换XML文件的结构,但我被卡住了。

输入:

<products>
<product>
<name>name</name>
<prodoptions>
<prodoption sku="foo" description="description"/>
<prodoption sku="bar" description="otherdescription"/>
</prodoptions>
</product>
</products>

所需的输出:

<products>
<product>
<name>name</name>
<sku>foo</sku>
<description>description</description>
</product>
<product>
<name>name</name>
<sku>bar</sku>
<description>otherdescription</description>
</product>
</products>

到目前为止,我已经能够使用xslt将选项的属性移动到单独的子元素中,并重命名一些重复的元素,但是我坚持为选项创建第二个产品元素。什么xlst转换将产生输出?

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="prodoption/@*">
<xsl:element name="{name()}">
<xsl:value-of select="."/>
</xsl:element>
</xsl:template>
<xsl:template match="prodoption/code">
<sku>
<xsl:apply-templates select="@* | node()"/>
</sku>
</xsl:template>
<xsl:template match="prodoption/@code">
<xsl:element name="sku">
<xsl:value-of select="."/>
</xsl:element>
</xsl:template>
<xsl:template match="prodoption/@description">
<xsl:element name="name2">
<xsl:value-of select="."/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>

由于

0 个答案:

没有答案