2012-04-18 72 views
0

我正在使用XML來構建調查。 A(矩陣)問題的調查中,列和行看起來是這樣的:如何使用不同類型的XSLT模板(「基於模塊」)?

<?xml version= "1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="SurveyTemplate.xsl"?> 

<Survey> 
    <id>1</id> 
    <title>Spørgeskema</title> 
    <ViewList> 
     <View> 
      <id>1</id> 
      <parrent_id>null</parrent_id> 
      <order>1</order> 
      <title>Dette er titlen på den første side/kategori</title> 
      <QuestionList> 
       <Question> 
        <id>1</id> 
        <visible>false</visible> 
        <order>1</order> 
        <classname>matrixradio</classname> 
        <type>MatrixRadio</type> 
        <wording>Dette er et spørgsmål</wording> 
        <helptext>Dette er en hjælpetekst, som kan hjælpe respondenten med at forstå spørgsmålet</helptext> 
        <RowList> 
         <Row> 
          <id>412</id> 
          <order>1</order> 
          <visible>true</visible> 
          <css_class_name>Hvis man har lyst til at formatere den r�kke p� en speciel m�de</css_class_name> 
          <helptext>Dette er en hjælpetekst, der kan hjælpe respondenten med at forstå hvad denne række betyder</helptext> 
          <title>Dette er titlen på den første række</title> 
          <ColumnList> 
           <Column> 
            <id>3421</id> 
            <visible>true</visible> 
            <order>1</order> 
            <title>Dette er titlen på den første kolonne</title> 
            <helptext>Hjælpetekst, der hjælper brugeren med at forstå denne kolonne</helptext> 
            <value>false</value> 
           </Column> 
           <Column> 
            <id>123</id> 
            <visible>true</visible> 
            <order>2</order> 
            <title>Dette er titlen på den anden kolonne</title> 
            <helptext>Hjælpetekst, der hjælper brugeren med at forstå denne kolonne</helptext> 
            <value>true</value> 
           </Column> 
           <Column> 
            <id>444</id> 
            <visible>true</visible> 
            <order>1</order> 
            <title>Dette er titlen på den tredje kolonne</title> 
            <helptext>Hjælpetekst, der hjælper brugeren med at forstå denne kolonne</helptext> 
            <value>false</value> 
           </Column> 
           <Column> 
            <id>222</id> 
            <visible>true</visible> 
            <order>1</order> 
            <title>Dette er titlen på den fjerde kolonne</title> 
            <helptext>Hjælpetekst, der hjælper brugeren med at forstå denne kolonne</helptext> 
            <value>false</value> 
           </Column> 
          </ColumnList> 
         </Row> 
         <Row> 
          <id>555</id> 
          <order>2</order> 
          <visible>true</visible> 
          <css_class_name>Hvis man har lyst til at formatere den række på en speciel måde</css_class_name> 
          <helptext>Dette er en hjælpetekst, der kan hjælpe respondenten med at forstå hvad denne række betyder</helptext> 
          <title>Dette er titlen på den anden række</title> 
          <ColumnList> 
           <Column> 
            <id>3421</id> 
            <visible>true</visible> 
            <order>1</order> 
            <title>Dette er titlen på den første kolonne</title> 
            <helptext>Hjælpetekst, der hjælper brugeren med at forstå denne kolonne</helptext> 
            <value>true</value> 
           </Column> 
           <Column> 
            <id>123</id> 
            <visible>true</visible> 
            <order>2</order> 
            <title>Dette er titlen på den anden kolonne</title> 
            <helptext>Hjælpetekst, der hjælper brugeren med at forstå denne kolonne</helptext> 
            <value>false</value> 
           </Column> 
           <Column> 
            <id>444</id> 
            <visible>true</visible> 
            <order>1</order> 
            <title>Dette er titlen på den tredje kolonne</title> 
            <helptext>Hjælpetekst, der hjælper brugeren med at forstå denne kolonne</helptext> 
            <value>false</value> 
           </Column> 
           <Column> 
            <id>222</id> 
            <visible>true</visible> 
            <order>1</order> 
            <title>Dette er titlen på den fjerde kolonne</title> 
            <helptext>Hjælpetekst, der hjælper brugeren med at forstå denne kolonne</helptext> 
            <value>false</value> 
           </Column> 
          </ColumnList> 
         </Row> 
        </RowList> 
       </Question> 
       <Question> 
        <id>412</id> 
        <visible>true</visible> 
        <order>2</order> 
        <type>Matrix</type> 
        <wording>Dette er også et spørgsmål</wording> 
        <helptext>Dette er en hjælpetekst, som kan hjælpe respondenten med at forstå spørgsmålet</helptext> 
       </Question> 
      </QuestionList> 
     </View> 
     <View> 
      <id>2</id> 
      <parrent_id>null</parrent_id> 
      <order>1</order> 
      <title>Moo</title> 
     </View> 
    </ViewList> 
</Survey> 

我想用不同的XSLT模板,這取決於

<type>MatrixRadio</type> 

節點上。所以即使所有的問題都是以相同的方式建立起來的,它們可能看起來不一樣。 我想爲每個問題類型使用不同的.XSLT文件,它定義了問題,列和行的外觀。

如果我使用下面的代碼包括「模塊/模板」:

<xsl:include href="MatrixRadio.xslt" /> 

而且模板中包含的問題怎麼樣,行和列的格式應該定義。如果在同一頁面上存在不同類型的問題,那麼是否會出現干擾,因爲定義每種類型的問題,行和列的XSLT模板會相互覆蓋?

就我所知,當你使用xsl:include時,它會從樣式表中獲取內容並將其放入當前。如果我需要使用4個不同的樣式表,並且這些樣式表中的模板具有相同的名稱,我認爲會有麻煩。

- 編輯

根據評論我寫了下面的代碼,我不能讓工作:

SurveyTemplate.xsl

<?xml version="1.0" encoding="ISO-8859-1"?> 

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

    <xsl:include href="MatrixRadio.xslt" /> 

    <xsl:template match="/"> 
    <html> 
     <body> 
     <h2>XSLT-Test template</h2> 
     <xsl:apply-templates/> 
     </body> 
    </html> 
    </xsl:template> 

    <xsl:template match="ViewList"> 
    <p> 
     <xsl:for-each select="View"> 
     <xsl:call-template name="ViewTemplate"> 
     </xsl:call-template> 
     </xsl:for-each> 
    </p> 

    </xsl:template> 

    <xsl:template name="ViewTemplate"> 

    <p> 
     <xsl:value-of select="title"/> 
    </p> 

    </xsl:template> 
</xsl:stylesheet> 

MatrixRadio.xslt

<?xml version="1.0" encoding="utf-8"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:template match="Question[type = 'MatrixRadio']"> 

    <div> 
     <xsl:attribute name="class"> 
     <xsl:value-of select="classname"/> 
     </xsl:attribute> 
     <b> 
     <xsl:value-of select="order"/> . <xsl:value-of select="wording"/> 
     </b> 

    </div> 

    </xsl:template> 

</xsl:stylesheet> 

MatrixRadio.xslt模板未被處理。我使用它與我上面發佈的XML結構。

+0

可以包括所有的樣式表,並簡單地讓它們只匹配特定類型的問題:'的 ...' – Torious 2012-04-18 13:37:13

+0

酷我會試試這個,回到你身邊:) – Kenci 2012-04-18 19:42:29

+0

我試過你的建議,但我不能得到它的工作。你能否看看我編輯的問題? – Kenci 2012-04-19 09:49:53

回答

0

你的代碼基本上沒問題,但是你不會在MatrixRadio中調用模板,所以它不會發生。一個小的變化,以您的ViewTemplate模板:

<xsl:template name="ViewTemplate"> 
    <p> 
     <xsl:value-of select="title"/> 
    </p> 
    <xsl:apply-templates select="QuestionList"/>  
</xsl:template> 

,它工作正常

相關問題