xsl-list
[Top] [All Lists]

Re: [xsl] Creating elements in an arbitrary position in the result document

2010-01-17 19:20:42
At 2010-01-18 01:48 +0100, cvergara(_at_)zedat(_dot_)fu-berlin(_dot_)de wrote:
Hello,

using the information in a subtree of a source document, I would like to
create an element in an arbitrary position in the result document:
Source:
<?xml version="1.0"?>
<A>
... <- unknown/variable amount of nodes
  <B>
    <C attrC="value1"/>
      <D attrD="value2"/>
  </B>
</A>
Result:
<A>
  <new_element attrC="value1" attrD="value2"/>
    ... <- unknown amount of elements in source between A and B
    <B>
...

Is it possible to do this? I didn't find it in the FAQ of things that are
not possible in XSLT.
If yes, how?

It looks like all you are doing is starting the reconstituted A with a new first child and then processing the original content as is.

An example is below, but I'm guessing I'm missing something from your description. Your behaviour for <B> would be added to my solution with a template matching it. BTW, I know you don't have attributes for <A> but I left handling for that in the solution.

I hope this helps.

. . . . . . . . . . Ken

t:\ftemp>type cristobal.xml
<A>
... &lt;- unknown/variable amount of nodes
  <B>
    <C attrC="value1"/>
      <D attrD="value2"/>
  </B>
</A>

t:\ftemp>xslt cristobal.xml cristobal.xsl
<?xml version="1.0" encoding="utf-8"?><A><new_element attrC="value1" attrD="valu
e2"/>
... &lt;- unknown/variable amount of nodes
  <B>
    <C attrC="value1"/>
      <D attrD="value2"/>
  </B>
</A>
t:\ftemp>type cristobal.xsl
<?xml version="1.0" encoding="US-ASCII"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
                version="1.0">

<xsl:template match="A">
  <xsl:copy>
    <xsl:copy-of select="@*"/>
    <new_element attrC="value1" attrD="value2"/>
    <xsl:apply-templates select="node()"/>
  </xsl:copy>
</xsl:template>

<xsl:template match="@*|node()"><!--identity for all other nodes-->
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>

</xsl:stylesheet>

t:\ftemp>


--
UBL and Code List training:      Copenhagen, Denmark 2010-02-08/10
XSLT/XQuery/XPath training after http://XMLPrague.cz 2010-03-15/19
XSLT/XQuery/XPath training:   San Carlos, California 2010-04-26/30
Vote for your XML training:   http://www.CraneSoftwrights.com/s/i/
Crane Softwrights Ltd.          http://www.CraneSoftwrights.com/s/
Training tools: Comprehensive interactive XSLT/XPath 1.0/2.0 video
Video lesson:    http://www.youtube.com/watch?v=PrNjJCh7Ppg&fmt=18
Video overview:  http://www.youtube.com/watch?v=VTiodiij6gE&fmt=18
G. Ken Holman                 mailto:gkholman(_at_)CraneSoftwrights(_dot_)com
Male Cancer Awareness Nov'07  http://www.CraneSoftwrights.com/s/bc
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>
--~--