如果以下兄弟中存在特定标记,请匹配标记

时间:2012-02-17 08:52:34

标签: xml xslt xpath xslt-1.0

我有一个xml,我的标记<T>只会被转换,如果其后面至少有一个标记<C>作为兄弟。

<Doc>
    <T>T1</T>
    <A>A1</A>
    <T>T2</T>
    <C>C2</C>
    <T>T3</T>
    <X>X1</X>
</Doc>

应该成为:T1A1T2C2X1

我目前有:     

<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 个答案:

答案 0 :(得分:1)

使用:

<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