我想获取节点位置作为元素的属性。我的意思是我想在id
元素内获取Aut-01
值,例如Aut-02
,context
。我在下面提到了输入,输出和尝试的代码。我正在使用XSLT 2.0
输入:
<con-group>
<con c-type="aut">
<name>
<fname>Kent-Dennis</fname>
</name>
</con>
<con c-type="aut">
<name>
<fname>dfr-gvfrt</fname>
</name>
</con>
<con c-type="aut">
<con-id con-id-type="ABC11"
>https://wasq.lk/0000-0002-8551-9535</con-id>
<name>
<fname>Glazier</fname>
</name>
</con>
<con c-type="aut">
<con-id con-id-type="ABC12"
>https://wasq.lk/0000-0002-8551-8535</con-id>
<name>
<fname>Glazier</fname>
</name>
</con>
</con-group>
输出应为:
<link ref="https://orcid.org/0000-0002-8551-9535">
<context type="Aut" id="Aut-01">
<image ref="../../../../command/Templates/Template Art/Auth_.jpg"/>
</context><s/>
<link>
<link ref="https://orcid.org/0000-0002-8551-9535">
<context type="Aut" id="Aut-02">
<image ref="../../../../command/Templates/Template Art/Auth_.jpg"/>
</context><s/>
<link>
尝试代码:
<xsl:template match="con-id">
<xsl:text> </xsl:text>
<link ref="{.}">
<xsl:variable name="aaa" select="count(self::con-id/preceding-sibling::*)+1"/>
<context type="Aut" id="{$aaa}">
<image ref="../../../../command/Templates/Template Art/Auth_.jpg"/>
<context><s/>
</link>
</xsl:template>
帮我解决这个问题。我总是1
获得ID值。作为我的代码,我没有得到想要的输出。
答案 0 :(得分:2)
您每次都会得到1,因为con-id
没有在前的兄弟姐妹。 (如果元素具有相同的父元素,则它们是兄弟姐妹)。您应该算出父级的前级兄弟姐妹(但前提是前级兄弟姐妹看起来像con-id
)
<xsl:variable name="aaa" select="count(parent::*/preceding-sibling::*[con-id])+1"/>
或者,您可以使用preceding
轴
<xsl:variable name="aaa" select="count(preceding::con-id)+1"/>
您也可以在此处使用xsl:number
<xsl:variable name="aaa">
<xsl:number count="con[con-id]" />
</xsl:variable>
如果您想使用position()
,则必须添加另一个模板来匹配con-group
,然后仅选择con-id
元素(尽管只有在您没有的情况下,它才能真正起作用您想要执行的其他处理可能会发生冲突。
<xsl:template match="con-group">
<xsl:apply-templates select="*/con-id" />
</xsl:template>
<xsl:template match="con-id">
<xsl:text> </xsl:text>
<link ref="{.}">
<xsl:variable name="aaa" select="position()" />
<context type="Aut" id="{$aaa}">
<image ref="../../../../command/Templates/Template Art/Auth_.jpg"/>
</context><s/>
</link>
</xsl:template>
答案 1 :(得分:0)
检查此代码:-
<xsl:template match="con">
<xsl:variable name="aaa" select="position()"/>
<xsl:for-each select="con-id">
<xsl:text> </xsl:text>
<link ref="{.}">
<context type="Aut" id="{$aaa}">
<image ref="../../../../command/Templates/Template Art/Auth_.jpg"/>
</context>
</link>
</xsl:for-each>
</xsl:template>
答案 2 :(得分:0)
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:for-each select="//con-id">
<link ref="{.}">
<xsl:variable name="aaa" select="position()"/>
<context type="Aut" id="{$aaa}">
<image ref="../../../../command/Templates/Template Art/Auth_.jpg"/>
</context>
</link>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>