RE: [xsl] Problems with mixed content and inline elements when transforming XHTML into another XML format

Subject: RE: [xsl] Problems with mixed content and inline elements when transforming XHTML into another XML format
From: Tony Kinnis <kinnist@xxxxxxxxx>
Date: Mon, 27 Feb 2006 02:11:08 -0800 (PST)
I appreciate your response and the fact you leave something to be
figured out. Admittedly I am very new to XSLT (less than 2 weeks) and
have a lot to learn. This problem in particular was escaping me and, to
boot, frustrating me as I am running up against my deadline. However, I
have finally got it right (just this second) and I now have a greater
understanding of what I was missing. I had changed so many things over
time I had lost track of what I had and hadn't tried. Most of my
confusion was around the match and grouping functionality adn the thing
that finaly bit me in the end was missing the copy-of, which was
present in your sample. 

Anyway, thanks helping me to stretch my learning. I do have one
performance/maintainability question if you don't mind. I am wondering
about the is-inline method. In particular the "or" condition for
building the sequence of in-line elements. Is this the best way to
manage the list of included elements. I am wondering if it is a
performance issue. I am wondering if there is a better way to capture
the list of inline elements. Maybe in a global variable?

FYI - Here is the working and complete version of the script. It seems
so straight forward now. Thanks again.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="";
    <xsl:output indent="yes" method="xml" encoding="UTF-8"
    <xsl:template match="node()|@*">
            <xsl:for-each-group select="node()|@*"
                    <xsl:when test="current-grouping-key()">
                        <xsl:element name="my:textnode">
                            <xsl:copy-of select="current-group()"/>
                        <xsl:apply-templates select="current-group()"/>
    <xsl:function name="f:is-inline" as="xs:boolean">
        <xsl:param name="node" as="node()"/>
        I am concerned about building this sequence in this way. Maybe
there is a better way.
        <xsl:sequence select="($node instance of text() and

--- Michael Kay <mike@xxxxxxxxxxxx> wrote:

> > 
> > Sorry to keep asking about this problem but I am still having
> issues.
> > The change you mention below does remove the error but now it never
> > hits the block of code to wrap the elements in the textnode. It is
> > simply outputting the input verbatim. 
> I'm afraid that when I reply to a question, I supply snippets of code
> that
> address the issue you're having, but don't attempt to supply a
> complete
> working solution: I leave that to you. Usually I reckon that this
> forces
> people to understand the solution rather than just transcribing it,
> which
> means they will learn more and have less need to return for further
> help...
> Looking at your code, you're inside a template with match="/", so
> select="node()" is only going to select the outermost element, and
> grouping
> a single element is not very useful. You need to put this code in the
> template rule for the element that contains the nodes to be grouped.
> You may
> also need to apply it at more than one level, in which case the
> xsl:copy-of
> should be replaced by an xsl:apply-templates.
> Michael Kay

Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 

Current Thread