2009-08-24 35 views
2

我有以下XML(部分)文件:如何僅將XSL模板應用於包含具有特定屬性值和元素值的子元素的元素?

<export> 
<table name="CLIENT"> 
    <row> 
     <col name="CODE_CLIENT" type="System.String">1000010026</col> 
     <col name="LIBELLE" type="System.String">Test|</col> 
     <col name="PROSPECT" type="System.Decimal">1</col> 
    </row> 
    <row> 
     <col name="CODE_CLIENT" type="System.String">1000010025</col> 
     <col name="LIBELLE" type="System.String">Rue de la 2eme ad|</col> 
     <col name="PROSPECT" type="System.Decimal">0</col> 
    </row> 
    <row> 
     <col name="CODE_CLIENT" type="System.String">1000010125</col> 
     <col name="LIBELLE" type="System.String">Test4</col> 
     <col name="PROSPECT" type="System.Decimal">0</col> 
    </row> 
    <row> 
     <col name="CODE_CLIENT" type="System.String">1000010035</col> 
     <col name="LIBELLE" type="System.String">Rue</col> 
     <col name="PROSPECT" type="System.Decimal">1</col> 
    </row> 
    </table></export> 

和以下XSL:

<xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:output method="text" indent="yes"/> 

    <xsl:template match="/"> 
    <xsl:apply-templates select="export/table[@name='CLIENT']"/> 

    </xsl:template> 

    <xsl:template match="row"> 
     SOME TEMPLATE CODE 

    </xsl:template> 


</xsl:stylesheet> 

我想申請的第一個模板(匹配= 「/」)只對「行「前景值爲1.在我的例子中,只會變換第一行和最後一行。

我試圖

<xsl:apply-templates select="export/table[@name='CLIENT']/row[col[@name='PROSPECT']=1]"/> 

但給了我一個語法錯誤。

任何人都知道如何進行?

回答

2

我的建議:

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

    <xsl:template match="/"> 
    <xsl:apply-templates select="export/table[@name='CLIENT']"/> 
    </xsl:template> 

    <xsl:template match="table"> 
    <xsl:apply-templates select="row[col[@name='PROSPECT' and text() = '1']]" /> 
    </xsl:template> 

    <xsl:template match="row"> 
    SOME TEMPLATE CODE 
    </xsl:template> 

</xsl:stylesheet> 

雖然你的嘗試:

<xsl:apply-templates select=" 
    export/table[@name='CLIENT']/row[col[@name='PROSPECT']=1] 
"/> 

應該工作,以及(它不是那麼明顯,但它並沒有錯本身) 。不知道爲什麼它不適合你。

+0

Tomalak,謝謝你的回答。我嘗試了你的建議,並且發現了與我的版本相同的錯誤: ']'required,'@'found(來自法語翻譯) :-( – Jalil 2009-08-24 15:29:39

+0

Tomalak,對不起,我沒有嘗試過你的解決方案但直接: Jalil 2009-08-24 15:31:48

+0

順便說一下,請告訴您正在使用的XSLT處理器。 – Tomalak 2009-08-24 15:53:32

0

小心:未經測試。它甚至可能無法正確解析。

<xsl:template match="row[string(./col[@name='PROSPECT']) = '1']"> 

</xsl:template> 
+0

謝謝德克。我沒有嘗試過你的開拓者,因爲我從Tomalak的開始,但它看起來也很不錯。我保留進一步使用的例子;-) – Jalil 2009-08-24 16:00:45

0

我試過你的應用模板,它沒有失敗。你確定錯誤是在應用程序模板?

+0

我得到的錯誤是: ']'required,'@'found(翻譯自法文) – Jalil 2009-08-24 15:30:33

0
<xsl:apply-templates select="export/table[@name='CLIENT']/row/col[text()='1' and @name='PROSPECT']"/> 
相關問題