XML to HTML: outputting literal child nodes
Whats the most effcient XSL for transforming this XML:
<matflash label="popup" btn-label="Interview Transcript">
<flashtext><a href="/education/resources/students/video_cases/protected/ece/product/media/508_Guidance_T开发者_C百科ranscript.doc">Download Transcript</a></flashtext>
<flashtext class="H1">Linda Rudolph - Teacher</flashtext>
<flashtext class="H1">Little Sprouts, Methuen School</flashtext>
<flashtext><b>Interviewer:</b> Linda, could you start by describing to me what you think the basis of a well-managed classroom is. Describe in your own words, what you think the basis of a well managed classroom is? What helps you get there?</flashtext>
<flashtext><b>Linda:</b> I think just having a well managed classroom is just having good expectations so that for the children, that they know their limits, what is expected of them, what is just being able to tell them, "Okay, this is what we're doing today.", and then just set it up for them and then they know they can accomplish it, just not having any mixed messages for them.</flashtext>
<flashtext><b>Linda:</b> Having a well managed classroom is just having a really good curriculum that the teacher's can follow and teach the children so that they're interested and they know exactly what's expected of them and then the management comes from them just knowing what's expected of them, just setting up classroom rules and everybody being able to follow them and knowing what's expected.</flashtext>
...
</matflash>
to this HTML:
<div id="interview">
<div><a href="/education/resources/students/video_cases/protected/ece/product/media/508_Guidance_Transcript.doc">Download Transcript</a></div>
<div class="H1">Linda Rudolph - Teacher</div>
<div class="H1">Little Sprouts, Methuen School</div>
<div><b>Interviewer:</b> Linda, could you start by describing to me what you think the basis of a well-managed classroom is. Describe in your own words, what you think the basis of a well managed classroom is? What helps you get there?</div>
<div><b>Linda:</b> I think just having a well managed classroom is just having good expectations so that for the children, that they know their limits, what is expected of them, what is just being able to tell them, "Okay, this is what we're doing today.", and then just set it up for them and then they know they can accomplish it, just not having any mixed messages for them.</div>
<div><b>Linda:</b> Having a well managed classroom is just having a really good curriculum that the teacher's can follow and teach the children so that they're interested and they know exactly what's expected of them and then the management comes from them just knowing what's expected of them, just setting up classroom rules and everybody being able to follow them and knowing what's expected.</div>
...
</div>
I'm having trouble using <xsl:value-of>
or <xsl:copy>
to display the literal child nodes (tag and text) of flashtext.
The following stylesheet:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="matflash">
<div id="interview">
<xsl:apply-templates />
</div>
</xsl:template>
<xsl:template match="flashtext">
<div>
<xsl:apply-templates select="@*|node()" />
</div>
</xsl:template>
</xsl:stylesheet>
Produces the following result when applied to your source document:
<div id="interview">
<div>
<a href="/education/resources/students/video_cases/protected/ece/product/media/508_Guidance_Transcript.doc">Download Transcript</a>
</div>
<div class="H1">Linda Rudolph - Teacher</div>
<div class="H1">Little Sprouts, Methuen School</div>
<div>
<b>Interviewer:</b>
Linda, could you start by describing to me what you think the basis of
a well-managed classroom is. Describe in your own words, what you
think the basis of a well managed classroom is? What helps you get
there?
</div>
<div>
<b>Linda:</b>
I think just having a well managed classroom is just having good
expectations so that for the children, that they know their limits,
what is expected of them, what is just being able to tell them, "Okay,
this is what we're doing today.", and then just set it up for them and
then they know they can accomplish it, just not having any mixed
messages for them.
</div>
<div>
<b>Linda:</b>
Having a well managed classroom is just having a really good
curriculum that the teacher's can follow and teach the children so
that they're interested and they know exactly what's expected of them
and then the management comes from them just knowing what's expected
of them, just setting up classroom rules and everybody being able to
follow them and knowing what's expected.
</div>
</div>
Note the use of the identity transform to copy through all elements below the flashtext
nodes. This works with your input, but would need to be adjusted if you had elements above or below matflash
and flashtext
that you did not want to copy through. As always, different requirements result in different solutions.
Edit: Upon reflection, if you just want to copy everything below the flashtext
and have something that still works in a larger document, then the standard identity transform template can be replaced with a single copy-of
:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="matflash">
<div id="interview"><xsl:apply-templates /></div>
</xsl:template>
<xsl:template match="flashtext">
<div><xsl:copy-of select="@*|node()" /></div>
</xsl:template>
</xsl:stylesheet>
...which produces the same output.
精彩评论