2013-07-11 65 views
0

我們使用以下選擇所有節點,其中「ExperienceInfo」包含「582」:XSLT選擇與2包含

<xsl:apply-templates disable-output-escaping="yes" select="td:Benutzer_zu_Gastro[contains(td:ExperienceInfo, '582')]"> 

而這個選擇,其中「Kategorien」包含「餐廳」的所有節點:

<xsl:apply-templates disable-output-escaping="yes" select="td:Benutzer_zu_Gastro[contains(td:Kategorien, 'Restaurant')]"> 

我們如何將兩者合併爲一個語句,以便在ExperienceInfo包含582 AND Kategorien包含餐廳時選擇ONLY節點?

非常感謝您的幫助!

+1

xsl:apply-templates不接受disable-output-escaping屬性,任何一致的XSLT處理器都會給你一個錯誤信息。 (我遇到過人們在他們的xsl:value-of指令中使用了禁用輸出轉義,就像某種魔術般的塵埃,但這太荒謬了......) –

+0

感謝提示Michael。我們會避免它的未來! –

回答

0

它是如此簡單,你一定以爲「不,這不可能吧」:

<xsl:apply-templates select=" 
    td:Benutzer_zu_Gastro[ 
    contains(td:ExperienceInfo, '582') 
    and contains(td:Kategorien, 'Restaurant') 
    ] 
"> 

如果你的XML是什麼樣子<td:ExperienceInfo>582</td:ExperienceInfo>(等)也可以變得更加簡單。

<xsl:apply-templates select=" 
    td:Benutzer_zu_Gastro[ 
    td:ExperienceInfo = '582' and td:Kategorien = 'Restaurant' 
    ] 
"> 

兩個一般注意事項

  • ,如果你的XML已經劃定名單像<td:ExperienceInfo>582,693</td:ExperienceInfo>(請說事實並非如此),你將需要使用但它可能是一個好主意,包括分離器性格避免誤報:

    contains(concact(',', td:ExperienceInfo, ','), ',582,') 
    
  • disable-output-escaping="yes"不是XSLT處理器的標準功能。正如邁克爾凱指出in the comments,它首先在<xsl:apply-templates>上甚至沒有句法上的有效性。
    試着擺脫它。 有時候這是無法避免的,但它通常表明一個設計缺陷 - 它能夠輸出不合格的XML,並且是數據和結構分離不當的標誌。

+0

感謝Tomalak!你是絕對正確的:太容易想到這可能真的是解決方案:)也感謝concact信息。我想我們很快就會需要更多的東西,因爲我們正在轉換的XML通常是無窮的字符串流。很好的答案! –