我尝试根据
@id
属性值在属性 @rid
中输入正确的值。a
大于1
并且元素cu
等于'au'元素中的1
,那么如何在属性值之后添加位置,例如(<a id="a">...</a>, <a id="a">...</a>)
s/b (<a id="a1">...</a>, <a id="a2">...</a>)
a
元素。输入:
<root>
<t>Title</t>
<au>
<cu>
<x rid="a1 a2"/>
</cu>
</au>
<a id="a">Centre</a>
<a id="a">Westmead</a>
<n>notes</n>
</root>
XSLT 代码:
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="a">
<xsl:if test="count(../a) > 1 and count(../au/cu[x]) = 1 and @id">
<xsl:for-each-group select="self::node()" group-adjacent="self::a">
<xsl:variable name="pos" select="position()"/>
<xsl:element name="a">
<xsl:attribute name="id">
<xsl:value-of select="concat('a',$pos)"/>
</xsl:attribute>
<xsl:apply-templates/>
</xsl:element>
<!--</xsl:for-each>-->
</xsl:for-each-group>
</xsl:if>
</xsl:template>
期望输出:
<root>
<t>Title</t>
<au>
<cu>
<x rid="a1 a2"/>
</cu>
</au>
<a id="a1">Centre</a>
<a id="a2">Westmead</a>
<n>notes</n>
如果您想从模板中进行操作
a
使用
<xsl:template match="root[a[2] and not(au/cu[x][2])]/a[@id]">
<xsl:copy>
<xsl:attribute name="id">a<xsl:number/></xsl:attribute>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>