是否可以使用XSLT合并元素。
如果我有以下XML
<data>
<item column="left" value="1" />
<item column="left" value="2" />
<item column="right" value="3" />
<item column="left" value="4" />
<item column="right" value="5" />
<item column="right" value="6" />
<item column="right" value="7" />
<item column="left" value="8" />
<item column="right" value="9" />
<item column="right" value="10" />
</data>
我想要以下输出:
<data>
<item left="1" right="3 />
<item left="2" right="5" />
<item left="4" right="6" />
<item left="8" right="7" />
<item left="" right="9" />
<item left="" right="10" />
</data>
但我完全不知道是否可以使用XSLT
答案 0 :(得分:8)
这种转变:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output omit-xml-declaration="yes" indent="yes"/> <xsl:template match="data"> <xsl:variable name="vNumLeft" select="count(item[@column='left'])"/> <data> <xsl:apply-templates select="*[@column='left']"/> <xsl:apply-templates select= "*[@column='right'][position() > $vNumLeft]"/> </data> </xsl:template> <xsl:template match="item[@column='left']"> <xsl:variable name="vPos" select="position()"/> <item left="{@value}" right="{../item[@column='right'][$vPos]/@value}" /> </xsl:template> <xsl:template match="item[@column='right']"> <item left="" right="{@value}" /> </xsl:template> </xsl:stylesheet>
应用于提供的XML文档时:
<data> <item column="left" value="1" /> <item column="left" value="2" /> <item column="right" value="3" /> <item column="left" value="4" /> <item column="right" value="5" /> <item column="right" value="6" /> <item column="right" value="7" /> <item column="left" value="8" /> <item column="right" value="9" /> <item column="right" value="10" /> </data>
产生想要的结果:
<data> <item left="1" right="3"/> <item left="2" right="5"/> <item left="4" right="6"/> <item left="8" right="7"/> <item left="" right="9"/> <item left="" right="10"/> </data>
答案 1 :(得分:-3)
您将使用元素和属性标记...
<xsl:element name="item">
<xsl:attribute name="left"><xsl:value-of select="$theLeft"/></xsl:attribute>
<xsl:attribute name="right"><xsl:value-of select="$theRight"/></xsl:attribute>
</xsl:element>
...至于确定$ theLeft和$ theRight应该是什么的算法,我把它留给你。