我有一个XSL模板,匹配任何元素与< var>儿童:
<xsl:template match="*[var]"> <xsl:copy > <xsl:attribute name="editable"> <xsl:for-each select="var[@attr]"> <xsl:value-of select="concat(@attr,substring(' ',1 div (position()!=last())))"/> </xsl:for-each> </xsl:attribute> <xsl:attribute name="constraints"> <xsl:for-each select="var[@ok]"> <xsl:value-of select="concat(@attr,':',@ok,substring(';',1 div (position()!=last())))"/> </xsl:for-each> </xsl:attribute> <!-- if this is an <a> then we have to put the stuff inside it inside it --> <xsl:apply-templates select="@*" /> <xsl:apply-templates /> </xsl:copy> </xsl:template>
它将var元素的attrs连接到父元素的editable属性中;和oks成约束.
<xsl:template match="field"> <span> <xsl:attribute name="field"> <xsl:choose> <xsl:when test="boolean(@name)"> <xsl:value-of select="./@name"/> </xsl:when> <xsl:otherwise> <xsl:text>true</xsl:text> </xsl:otherwise> </xsl:choose> </xsl:attribute> <xsl:apply-templates /> </span> </xsl:template>
这只是将其转换为< span field =“name”>如果字段有一个,则名称与字段相同,否则为“true”.
我遇到的问题是,* [var]匹配一个字段,如果该字段有< var>作为一个孩子.但我想要发生的是* [var]首先匹配,然后匹配的字段,但之后.
目前,有一个输入
<field name="field1"> <var attr="class" ok="small,smaller" /> Text </field>
我明白了
<field name="field1" editable="class" constraints="class:small,smaller"> Text </field>
但我想要
<span field="field1" editable="class" constraints="class:small,smaller"> Text </span>
我找到了一些关于做两次通过的答案,但我不确定这是否是正确的答案,也不知道如何实现我找到的答案.我应该如何处理这个问题,如果有一个简单的答案,它是什么?