xslt处理应用模板上的select属性
我有一个XSLT,如下所示,并将此XSLT应用到输入xml中[粘贴在下面],除了需要澄清的一点外,它工作正常 这是输入xmlxslt处理应用模板上的select属性,xslt,Xslt,我有一个XSLT,如下所示,并将此XSLT应用到输入xml中[粘贴在下面],除了需要澄清的一点外,它工作正常 这是输入xml <Test> <Experiment id='1'> <Dish1> <Conditions pressure='x' temp='y'/> <Measurement timeStamp='8am' reading='y'/> </Dish1> &l
<Test>
<Experiment id='1'>
<Dish1>
<Conditions pressure='x' temp='y'/>
<Measurement timeStamp='8am' reading='y'/>
</Dish1>
<Dish2>
<Conditions pressure='x' temp='y'/>
<Measurement timeStamp='8am' reading='y'/>
</Dish2>
<Dish1>
<Conditions pressure='x' temp='y'/>
<Measurement timeStamp='2pm' reading='y'/>
</Dish1>
<Dish2>
<Conditions pressure='x' temp='y'/>
<Measurement timeStamp='2pm' reading='y'/>
</Dish2>
</Experiment>
<Experiment id='2'>
<Dish1>
<Conditions pressure='x' temp='y'/>
<Measurement timeStamp='9am' reading='y'/>
</Dish1>
</Experiment>
</Test>
这是xslt
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="Experiment">
<xsl:copy>
<xsl:apply-templates select="@*" />
<xsl:for-each-group select="*" group-by="local-name()">
<xsl:copy>
<xsl:apply-templates select="current-group()" />
</xsl:copy>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
<xsl:template match="Experiment/*">
<Observation>
<xsl:apply-templates select="*/@*" />
</Observation>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
这是一个很好的转变。但是,如果我在xslt上做如下更改,那么它就会出错。有什么想法吗
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="."/>
</xsl:copy>
</xsl:template>
即,在最后一次匹配中,我已从
更改为
表示当前节点。将模板应用于
时,就是将其应用于当前上下文
在您的情况下,模板将匹配测试
,输出其副本,并将模板应用于自身。然后它会再次匹配,基本上会让你陷入一个无休止的循环
通过在node()|@*
上应用模板,您将模板应用于所有子节点和属性。这里,在XSLT上,我的意思是,无论当前在该模板上匹配什么,它都可以是元素或属性,我正在通过应用模板
上的
为相同内容应用
。我不明白它怎么会没完没了地循环。