我一直在嘗試使用XSLT轉換XML文件的結構,但我卡住了。使用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>
感謝
爲什麼不發佈您的嘗試,以便我們可以修復它,而不必從頭開始爲您編寫代碼。 –
對此感到抱歉 –
如果他們匹配會很好。在給定的XML中我看不到'prodoption'。 –