|
Subject: RE: [xsl] Matching or selecting template problem From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Thu, 15 Jan 2009 16:00:42 -0000 |
> My problem: I need to match all the following sibling
> elements of the last <section> (in this case two <p> element
> and a <ul>) and create a new sibling <section> with the
> current following siblings as children of the new <section>.
This sounds as if you want to match "all the following siblings" jointly
rather than severally: that is, you want to write a template rule which
fires once to process the entire group of siblings. Well, you can't do that:
a template rule always matches a single node.
Why not just match the last section: match="section[last()]"?
You can then use <xsl:next-match/> to do the normal processing that would
apply to any other section, followed by the special logic for the last
section:
<xsl:template match="section[last()]">
<xsl:next-match/>
<section>
<xsl:copy-of select="following-sibling::*"/>
</section>
</xsl:template>
Alternatively, put the logic in the template rule for the parent element:
<xsl:template match="conbody">
<xsl:apply-templates select="section"/>
<section>
<xsl:copy-of select="section[last()]/following-sibling::*"/>
</section>
</xsl:template>
Michael Kay
http://www.saxonica.com/
>
> I have tried:
>
> conbody/section[last()]/following-sibling::* (XPath returns
> the correct result, but not valid as a template match)
>
> <xsl:template match="//conbody/section[last()]/p"/> Again,
> the XPath test gives me the expected result, but doesn't seem
> to match in a tempate
> <xsl:template match="//conbody/section[last()]/ul"/> Same
> as previous.
>
> I think I can create a template to match the following
> siblings of the last <section>, I can use a For Each to
> create the new section? Am I on the right track ? I'm unclear
> as to how to create new high level elements in which I need
> to nest EXISTING elements.
>
> I appreciate any solutions, but I would also like to
> understand the parts of this I seem to "get."
>
> Current content:*
> *
> <?xml version="1.0" encoding="UTF-8"?>
> <concept class="- topic/topic concept/concept">
> <title>TITLE</title>
> <prolog class="- topic/prolog "/>
> <conbody class="- topic/body concept/conbody">
> <section><title>TITLE</title></section>
> <section><title>TITLE</title></section>
> <section><title>TITLE</title></section>
> <p>TEXT</p>
> <p>TEXT</p>
> <ul>
> <li>
> <p>
> TEXT
> </p>
> </li>
> <li>
> <p>
> <xref/>
> </p>
> </li>
> </ul>
> </conbody>
> </concept>
>
> Desired Result:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <concept class="- topic/topic concept/concept">
> <title>TITLE</title>
> <prolog class="- topic/prolog "/>
> <conbody class="- topic/body concept/conbody">
> <section><title>TITLE</title></section>
> <section><title>TITLE</title></section>
> <section><title>TITLE</title></section>
> <section>
> <p>TEXT</p>
> <p>TEXT</p>
> <ul>
> <li>
> <p>
> TEXT
> </p>
> </li>
> <li>
> <p>
> <xref/>
> </p>
> </li>
> </ul>
> </section>
> </conbody>
> </concept>
>
> Charles Flanders
> cflanders@xxxxxxxxxx
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] Matching or selecting tem, George Cristian Bina | Thread | Re: [xsl] Matching or selecting tem, Wendell Piez |
| RE: [xsl] casting sequences, Michael Kay | Date | Re: [xsl] Matching or selecting tem, Wendell Piez |
| Month |