2012-02-17 13 views
1

我有一個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

用途:

<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 **元素作爲第一個子元素。 – 2012-02-17 09:24:20

+0

@TimC,謝謝。編輯。 – 2012-02-17 09:27:26

+0

謝謝。有沒有辦法做到這一點:所有其他標籤都被忽略了,就像我原來的標籤一樣,A,C和X都有特定的規則,而忽略了其他標籤? – stracktracer 2012-02-17 11:17:17

相關問題