Как получить позицию конкретного узла - PullRequest
0 голосов
/ 28 октября 2019

Существует структура XML:

<school>
    <class>
        <student>
            <ID>0023</ID>
            <NAME>JOHN</NAME>
        </student>
        <student>
            <ID>0067</ID>
            <NAME>STEVE</NAME>
        </student> 
        <student>
            <ID>0094</ID>
            <NAME>MARY</NAME>
        </student> 
        <student>
            <ID>0108</ID>
            <NAME>SARA</NAME>
        </student> 
        <student>
            <ID>0234</ID>
            <NAME>MARTIN</NAME>
        </student> 
    </class>
</school>

Мне нужно получить позицию определенного узла. Если я попрошу Стива, я получу 2 в результате. Потому что это второй студент из моего списка (сортировка по ID).

<steve_seq> 2 </steve_seq>

Заранее спасибо.

Я пробовал это:

 <steve_seq> 
<xsl:value-of select="count(school/class/student/name[.='steve']/preceding-sibling::name)+1"/> 
</steve_seq>

1 Ответ

0 голосов
/ 28 октября 2019

Если вы хотите ввести имя в таблицу стилей, вы можете сделать следующее:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

<xsl:template match="/">
    <steve_seq>
        <xsl:value-of select="count(school/class/student[NAME='STEVE']/preceding-sibling::student) + 1"/> 
    </steve_seq>
</xsl:template>

</xsl:stylesheet>

Обратите внимание, что XSLTчувствителен к регистру: name не то же самое, что NAME, а 'steve' не то же самое, что 'STEVE'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...