Соответствовать тегу, если в следующих братьях и сестрах существует определенный тег - PullRequest
1 голос
/ 17 февраля 2012

У меня есть xml, где мой тег <T> может быть преобразован только в том случае, если за ним стоит хотя бы один тег <C>, следующий за ним как брат или сестра.

В настоящее время у меня есть:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml"/>
    <xsl:template match="/">
        <xsl:element name="Doc">
            <xsl:apply-templates select="*" />
        </xsl:element>
    </xsl:template>

    <xsl:template match="A">
        <xsl:value-of select="."/>
    </xsl:template>

    <xsl:template match="C">
        <xsl:value-of select="."/>
    </xsl:template>

    <xsl:template match="X">
        <xsl:value-of select="."/>
    </xsl:template>

    <xsl:template match="T[following-sibling::* ??? exists C">
        <xsl:value-of select="."/>
    </xsl:template>

    <xsl:template match="*">
    </xsl:template>
</xsl:stylesheet>

Не уверен, как реализовать match="T[following-sibling::* ??? exists C"

1 Ответ

1 голос
/ 17 февраля 2012

Использование:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text"/>

    <xsl:template match="/*">
        <xsl:apply-templates select="*"/>
    </xsl:template>

    <xsl:template match="T[preceding-sibling::*[1][self::C]]"/>

    <xsl:template match="*">
        <xsl:value-of select="."/>
    </xsl:template>
</xsl:stylesheet>

Вывод:

T1A1T2C2X1
...