2016-06-16 69 views
-2

我看像這樣的XML代碼:模板匹配包含字符串或應用模板?

<student_list> 
 
\t <student name ="Pete"> 
 
\t \t <text v ="3. Grade (relevant) skilled in Maths."/> 
 
\t \t <text v ="But often sleeps."/> 
 
\t </student> 
 
\t <student name =" Laura"> 
 
\t \t <text v ="Biology kid (relevant)."/> 
 
\t \t <text v =""/> 
 
\t </student> 
 
\t <student name="Audrey"> 
 
\t \t <text v ="Both inspired by Biology and Maths."/> 
 
\t </student> 
 
\t <student name="Mario"> 
 
\t \t <text v ="Both inspired by Biology and Maths (relevant)."/> 
 
\t </student> 
 
</student_list>

我想實現的是: 提取所有學生的名字顯示自己的分隔相關科目。
「相關」是指示是否有必要展示這個孩子的主題。如果相關性出現在上下文中,則顯示主題,否則不顯示。
由於我只想比較兩個科目的起點(生物學和數學),我想說的是,如果一個科目缺失並且上下文相關,那麼請提及該科目對另一個缺失科目不熟練。
輸出應按主題排序。
混凝土這應該產生以下輸出: 皮特:在數學
勞拉熟練:在數學不熟練
馬里奧:所屬領域的技術在數學
皮特:在數學
勞拉不熟練:在生物學
馬里奧熟練:熟練生物

有人可以幫助我實現這一目標嗎? 我正在使用XSLT 1.0
我正在考慮匹配所有學生,並執行一些測試來檢查文本屬性是否包含特定值,但這非常Java編碼風格,並非真正的程序性,所以我相信這一點可以做得更好,更快,更容易。但我不知道如何負擔得起。

+0

您可以使用腳本呢?這對純xslt來說很難。 – user1751825

+0

科目列表(數學,生物學)從哪裏來? –

+0

不,不幸的是,不允許使用腳本。主題列表在xml中實現,應該手動擴展。 – BlackACE

回答

0

看看這可以幫助:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:my="http://www.example.com/my" 
exclude-result-prefixes="my"> 
<xsl:output method="text" encoding="utf-8"/> 

<my:subjects> 
    <subject>Math</subject> 
    <subject>Biology</subject> 
</my:subjects> 

<xsl:template match="/student_list"> 
    <xsl:variable name="students" select="student[contains(text/@v, 'relevant')]" /> 
    <xsl:for-each select="document('')/xsl:stylesheet/my:subjects/subject"> 
     <xsl:variable name="subject" select="." /> 
      <xsl:for-each select="$students"> 
       <xsl:value-of select="@name"/> 
       <xsl:text>: </xsl:text> 
       <xsl:choose> 
        <xsl:when test="text[contains(@v, $subject)]">Skilled in </xsl:when> 
        <xsl:otherwise>Not skilled in </xsl:otherwise> 
       </xsl:choose> 
       <xsl:value-of select="$subject"/> 
       <xsl:text>&#10;</xsl:text> 
      </xsl:for-each> 
    </xsl:for-each> 
</xsl:template> 

</xsl:stylesheet> 

結果

Pete: Skilled in Math 
Laura: Not skilled in Math 
Mario: Skilled in Math 
Pete: Not skilled in Biology 
Laura: Skilled in Biology 
Mario: Skilled in Biology 
+0

感謝您的主席。不幸的是,一切似乎都陷入了「不熟練......」中,但如果我掌握它,我會試着自己解決這個問題。 – BlackACE

+0

這不是我得到的結果(見上文)。 –

+0

哦,是的,我已經完成了,必須改變一件事,以適應整個XML文件。再次感謝 – BlackACE