2012-02-17 8 views
1

私のタグ<T>は、少なくとも1つのタグ<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

利用を実現する方法がわから:

<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 
+0

私は、サンプルXMLは非常に最初の子要素として** C **の要素を持っている場合、これは正しい結果が得られないだろうと思います。 –

+0

@TimC、ありがとう。編集されました。 –

+0

ありがとうございます。私が元々持っていたように、他のすべてのタグは無視され、A、C、Xのための特定のルールが適用され、残りは無視される方法がありますか? – stracktracer

関連する問題