Мне нужно получить номер пути узла XML для использования в имени узла после выполнения преобразования с использованием XSLT - PullRequest
1 голос
/ 07 июля 2010

У меня есть XML, подобный этому:

<XML>
    <dealings>
        <members>
            <member path="Swap.1.&apos;stream#1.Schedule&apos;" source="0" type="string">CONTEND</member>
            <member path="Swap.1.&apos;stream#2.Schedule&apos;" source="0" type="string">CONTEND</member>
            <member path="Swap.1.&apos;stream#3.Schedule&apos;" source="0" type="string">CONTEND</member>
        </members>
    </dealings>
</XML>

И мне нужно выполнить преобразование, чтобы, кроме изменения содержимого, получить число после потока # для использования в имени узла,получить что-то вроде этого:

<XML>
    <flows-1>
        CONTEND
    </flows-1>
    <flows-2>
        CONTEND
    </flows-2>
    <flows-3>
        CONTEND
    </flows-3>  
</XML>

Я не могу найти правильный способ получить номер.Важно получить номер, а не список по порядку или угадать, потому что номер может быть не по порядку, не по порядку или даже начинаться с 1.

1 Ответ

4 голосов
/ 07 июля 2010

Эта таблица стилей:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <XML>
            <xsl:apply-templates/>
        </XML>
    </xsl:template>
    <xsl:template match="member">
        <xsl:element name="flows-{substring-before(substring-after(@path,'#'),'.')}">
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>

Результат (правильный) вывод:

<XML>
    <flows-1>CONTEND</flows-1>
    <flows-2>CONTEND</flows-2>
    <flows-3>CONTEND</flows-3>
</XML>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...