Получить положение узла как атрибут элемента - PullRequest
0 голосов
/ 08 июля 2019

Я хочу получить позицию узла в качестве атрибута элемента.Я имею в виду, я хочу получить значение 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>&#x2009;</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>

Помогите мнерешить это.Я всегда получаю значение Id 1.Как мой код, я не получаю вывод, который хочу.

Ответы [ 3 ]

2 голосов
/ 08 июля 2019

Вы получаете 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>&#x2009;</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>
0 голосов
/ 08 июля 2019
<?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>
0 голосов
/ 08 июля 2019

Проверьте этот код: -

<xsl:template match="con">
    <xsl:variable name="aaa" select="position()"/>
<xsl:for-each select="con-id">
    <xsl:text>&#x2009;</xsl:text>
    <link ref="{.}">
        <context type="Aut" id="{$aaa}">
            <image ref="../../../../command/Templates/Template Art/Auth_.jpg"/>
        </context>
    </link>
    </xsl:for-each>
</xsl:template>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...