Hi,
First, I don't know if the test will function at all since
they are empty
elements.
They do. See
<http://www.w3.org/TR/xslt#section-Conditional-Processing-with-xsl:choose> and
<http://www.w3.org/TR/xpath#section-Boolean-Functions>.
If they work, how would I (in future) be able to test if the
element is
empty?
Try to select it's children. "foo/node()" for any child, "foo/*" for elements
children, and so forth.
Second, I don't like my solution at all. It is not verey
generic, and for
each new state introduced (I have no control over this), my
"state" template
doubles in size.
Is there some smarter way of doing this?
A more elaborate answer than "yes" or "no" will be appreciated :)
For example
<xsl:template match="lv">
<xsl:copy>
<xsl:choose>
<xsl:when test="state/*">
<xsl:apply-templates select="state/*[1]" mode="x"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="declaration"/>
</xsl:otherwise>
</xsl:choose>
</xsl:copy>
</xsl:template>
<xsl:template match="*" mode="x">
<xsl:copy>
<xsl:choose>
<xsl:when test="following-sibling::*">
<xsl:apply-templates select="following-sibling::*[1]" mode="x"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="../../declaration"/>
</xsl:otherwise>
</xsl:choose>
</xsl:copy>
</xsl:template>
or
<xsl:template match="lv">
<xsl:copy>
<xsl:apply-templates select="(state/* | declaration)[1]" mode="x"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*" mode="x">
<xsl:copy>
<xsl:apply-templates select="following::*[1]" mode="x"/>
</xsl:copy>
</xsl:template>
<xsl:template match="declaration" mode="x">
<xsl:value-of select="."/>
</xsl:template>
Cheers,
Jarno - C-Drone Defect: Psycho2vii
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list