Reputation: 4882
I am using XML to build a survey. A (matrix) Question in the survey, with columns and rows looks like this:
<?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>
I would like to use different XSLT templates, depending on the
<type>MatrixRadio</type>
node. So even though all the questions are built up the same way, they can look different. I would to use a different .XSLT files for each question type, that defines how the question, columns, and rows should look like.
If i use the following code to include the "modules / templates":
<xsl:include href="MatrixRadio.xslt" />
And the template contains definitions for how Question, Row and Column should be formatted. If there are questions of different types on the same page, would there not come an inteference, as the XSLT templates that define Question, Row and Column of each type would override each other?
As far as i have read, when you use xsl:include - it takes the content from the stylesheet and puts it in the current. If i need to use 4 different stylesheets, and the templates within those stylesheets have the same name, i think there will be trouble.
-- EDIT
According to a comment i have written the following code, which i cant get to work:
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>
and
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>
the MatrixRadio.xslt template isnt being processed. I am using it with the XML structure i posted above.
Upvotes: 0
Views: 113
Reputation: 5130
Your code is mostly fine, but you don't call the template in MatrixRadio, so it isn't happening. One small change to your ViewTemplate template:
<xsl:template name="ViewTemplate">
<p>
<xsl:value-of select="title"/>
</p>
<xsl:apply-templates select="QuestionList"/>
</xsl:template>
and it works fine
Upvotes: 0