At 2013-03-22 14:14 -0700, Martin Holmes wrote:
If I have a template matching an attribute, and producing one in the
output tree, like this:
<xsl:template match="@style">
<xsl:attribute name="style" select="."/>
</xsl:template>
The above could be done with:
<xsl:template match="@style">
<xsl:copy-of select="."/>
</xsl:template>
Is there any way to know the name of the element in the result tree
which is the parent of the attribute being created?
In the result tree? No. It is write-only and cannot be
queried. You'd have to keep track of what you are doing.
Some context: I'm turning TEI @style attributes into HTML @style
attributes in the output, and I'd like to handle situations in which
this kind of input:
<hi rend="text-align: center;">Centred text</hi>
results in output that doesn't work:
<span style="text-align: center;">NOT centred because it's a span</span>
If I knew the output element was a <span> or element which is inline
by default, I could add "display: block" automatically to any @style
attribute that contains a block-level CSS property such as
text-align. I don't want to add "display: block" in all cases,
because e.g. a <div> element might already have a class which floats it.
It is a challenge but you have to keep track yourself.
When using XSLT 2.0 something I've done is I've added a tunnel
parameter to the apply-templates stack frame indicating that I'm in a
DIV and so act on it later when it comes time to do the style
attribute ... something along the lines of:
<xsl:template match="some-block-element">
<div>
<xsl:apply-templates>
<xsl:with-param name="in-a-div" tunnel="yes" select="true()"/>
</xsl:apply-templates>
</div>
</xsl:template>
<xsl:template match="@style">
<xsl:param name="in-a-div" tunnel="yes" select="false()"/>
<xsl:attribute name="style"
select="concat(.,if( $in-a-div ) then ';display:block' else'')"/>
</xsl:attribute>
</xsl:template>
Then you just have to remember to add that tunnel parameter for each
of the blocks you create so that the processing knows that was done
"way back when".
I hope this helps.
. . . . . . . . Ken
--
Public XSLT, XSL-FO, UBL and code list classes in Europe -- Apr 2013 |
Contact us for world-wide XML consulting and instructor-led training |
Free 5-hour lecture: http://www.CraneSoftwrights.com/links/udemy.htm |
Crane Softwrights Ltd. http://www.CraneSoftwrights.com/s/ |
G. Ken Holman mailto:gkholman(_at_)CraneSoftwrights(_dot_)com
|
Google+ profile: https://plus.google.com/116832879756988317389/about |
Legal business disclaimers: http://www.CraneSoftwrights.com/legal |
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--