我有源XML
<Cars>
<Car>
<Make>Fiat</Make>
<Colors>
<Color>RED</Color>
<Color>BLUE</Color>
</Colors>
</Car>
<Car>
<Make>Volvo</Make>
<Colors>
<Color>RED</Color>
<Color>WHITE</Color>
</Colors>
</Car>
<Car>
<Make>Renault</Make>
<Colors>
<Color>BLUE</Color>
<Color>BLACK</Color>
</Colors>
</Car>
</Cars>
我想转换成像
这样的东西<Cars>
<Detail>
<Name>MakeName</Name>
<Entry>Fiat</Entry>
<Entry>Volvo</Entry>
<Entry>Renault</Entry>
</Detail>
<Detail>
<Name>AvailableColors</Name>
<Entry>RED</Entry>
<Entry>BLUE</Entry>
<Entry>WHITE</Entry>
<Entry>BLACK</Entry>
</Detail>
<Cars>
我是XSL的新手,并且创建了一个用于处理的一半,但我仍然坚持将颜色作为目标中的单独元素
<xsl:template match="/">
<Cars>
<xsl:apply-templates />
</Cars>
</xsl:template>
<xsl:template match="Cars">
<xsl:apply-templates select="Car" />
</xsl:template>
<xsl:template match="Car">
<Detail>
<Name>MakeName</Name>
<xsl:apply-templates select="Make" />
</Detail>
</xsl:template>
<xsl:template match="Make">
<Entry><xsl:value-of select"text()"/></Entry>
</xsl:template>
我无法为<Name>AvailableColors</Name>
创建XSL,我对XSL很陌生,非常感谢任何帮助
答案 0 :(得分:2)
这是一个XSLT 1.0样式表,展示了如何使用Muenchian grouping消除重复的颜色:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:key name="k1" match="Car/Colors/Color" use="."/>
<xsl:template match="Cars">
<xsl:copy>
<Detail>
<Name>MakeName</Name>
<xsl:apply-templates select="Car/Make"/>
</Detail>
<Detail>
<Name>AvailableColors</Name>
<xsl:apply-templates select="Car/Colors/Color[generate-id() = generate-id(key('k1', .)[1])]"/>
</Detail>
</xsl:copy>
</xsl:template>
<xsl:template match="Car/Make | Colors/Color">
<Entry>
<xsl:value-of select="."/>
</Entry>
</xsl:template>
</xsl:stylesheet>
答案 1 :(得分:0)
请参阅此回答中给出的通用“粉碎”解决方案: