如何在不同类型上使用XSLT模板(“基于模块”)?

时间:2012-04-18 12:57:22

标签: xml xslt

我正在使用XML来构建调查。调查中的(矩阵)问题,列和行如下所示:

<?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文件,它定义了问题,列和行的外观。

如果我使用以下代码来包含“modules / templates”:

  <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结构。

1 个答案:

答案 0 :(得分:0)

你的代码很好,但是你没有在MatrixRadio中调用模板,所以它没有发生。对ViewTemplate模板进行一处小改动:

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

并且工作正常