我有这个xml,xslt转换有问题:
<start>
<row>
<xxx Caption="School1"></xxx>
<yyy Caption="Subject1"></yyy>
<zzz></zzz>
</row>
<row>
<xxx Caption="School2"></xxx>
<yyy Caption="Subject2"></yyy>
<zzz></zzz>
</row>
</start>
Xsl变换是这样的:
<xsl:stylesheet>
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<schools>
<xsl:apply-templates select="//row/*" />
</schools>
</xsl:template>
<xsl:template match="//row/*">
<school>
<xsl:if test="name()='xxx'">
<name>
<xsl:value-of select="@Caption"/>
</name>
</xsl:if>
<xsl:if test="name()='yyy'">
<subject>
<xsl:value-of select="@Caption"/>
</subject>
</xsl:if>
</school>
</xsl:template>
</xsl:stylesheet>
xsl变换给出了这个结果,这不是我想要的结果:
<schools>
<school>
<name>School1</name>
</school>
<school>
<subject>Subject1</subject>
</school>
<school />
<school>
<name>School2</name>
</school>
<school>
<subject>Subject2</subject>
</school>
<school />
</schools>
我希望结果如下:
<schools>
<school>
<name>School1</name>
<subject>Subject1</subject>
</school>
<school>
<name>School2</name>
<subject>Subject2</subject>
</school>
</schools>
名称和主题元素应位于同一学校元素内。
请帮助我寻求更好的解决方案。
答案 0 :(得分:1)
你为什么不这样做:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/start">
<schools>
<xsl:apply-templates/>
</schools>
</xsl:template>
<xsl:template match="row">
<school>
<xsl:apply-templates select="xxx | yyy"/>
</school>
</xsl:template>
<xsl:template match="xxx">
<name>
<xsl:value-of select="@Caption"/>
</name>
</xsl:template>
<xsl:template match="yyy">
<subject>
<xsl:value-of select="@Caption"/>
</subject>
</xsl:template>
</xsl:stylesheet>