0

改变它的实际最佳方法是什么

<root>
  <data/>
  <data/>
</root>

进入这个:

<data1/>
<data1/>
<data2/>
<data2/>

不知何故,xslt 引擎的工作方式让我认为它只能产生这个:

<data1/>
<data2/>
<data1/>
<data2/>

这是由这张简单的表格产生的:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="data">
    <xsl:element name="data1"/>
    <xsl:element name="data2"/>
</xsl:template>
</xsl:stylesheet>

是否可以在转换结束时进行某种重新排序(不使用第二个应用程序)?

4

2 回答 2

1

如果您只想添加示例样式表中的元素但以不同的顺序添加,您可以这样做。

<xsl:template match="/">
  <!-- adding  data1 for every data tag-->
  <xsl:for-each select="//data" >
    <xsl:element name="data1"/>
  </xsl:for-each>
  <!-- adding  data2 for every data tag-->
  <xsl:for-each select="//data" >
    <xsl:element name="data2"/>
  </xsl:for-each>
</xsl:template>
于 2013-10-10T20:46:32.400 回答
1

您必须使用两个单独的模板来创建data1data2元素。然后,您可以从匹配根节点的模板应用这些模板,例如。在这种情况下,mode属性 ofxsl:template也很有用:

<xsl:template match="/">
    <xsl:apply-templates select="//data" mode="data1"/>
    <xsl:apply-templates select="//data" mode="data2"/>
</xsl:template>

<xsl:template match="data" mode="data1">
    <xsl:element name="data1"/>
</xsl:template>

<xsl:template match="data" mode="data2">
    <xsl:element name="data2"/>
</xsl:template>
于 2013-10-10T20:49:25.983 回答