xsl-list
[Top] [All Lists]

RE: Add an element to the result xml document

2002-10-07 14:06:22
Joerg,
Thanks for your timely reply.  I understand you technique but that puts an
entire duplicate<MessageID>...</MessageID> following the current
<MessageID>...</MessageID>
I need just of copy of the element <MessageID> following the source
<MessageID> and </Message> following the source </MessageID>
Sorry I wasn't very clear.
Lynda

-----Original Message-----
From: Joerg Heinicke [mailto:joerg(_dot_)heinicke(_at_)gmx(_dot_)de]
Sent: Monday, October 07, 2002 3:32 PM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: Re: [xsl] Add an element to the result xml document


Hello Lynda,

hmm, I are copying in the wrong way. From the root context you are 
copying everything, you should copy node by node. You can read at 
http://www.w3.org/TR/xslt#copying how identity transformation can look like:

<xsl:template match="@*|node()">
   <xsl:copy>
     <xsl:apply-templates select="@*|node()"/>
   </xsl:copy>
</xsl:template>

Then you only need to add further template matching on <MessageID/> and 
say there, that you want to have it twice in the output:

<xsl:template match="MessageID">
   <xsl:copy>
     <xsl:apply-templates select="@*|node()"/>
   </xsl:copy>
   <xsl:copy>
     <xsl:apply-templates select="@*|node()"/>
   </xsl:copy>
</xsl:template>

Regards,

Joerg


LVanvleet(_at_)newark(_dot_)com wrote:
I have sucessfully copied all the elements in source xml to result xml but
I
also want duplicates of some elements.  In the partial xml doc below I
want
the result to contain two copies of the <MessageID> and </MessageID>
elements.

I am using this XSLT:

<?xml version='1.0'?>
<xsl:transform version="1.0"
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
<xsl:output method="xml" indent="yes"/>

<!-- copy all the elements to the result document -->
<xsl:template match="/">
      <xsl:copy-of select="."/>
</xsl:template>

<xsl:template match="Order">
      <xsl:apply-templates/>
</xsl:template>

<xsl:template match="//ListOfMessageID/MessageID">
      <!-- add an extra <MessageID> and </MessageID> element -->
    <xsl:element name="MessageID"/>
    <xsl:apply-templates select="node()"/>
  </xsl:template>
  
</xsl:transform>

On a document that starts with the elements:

<?xml version="1.0"?>
<!-- Exostar xCBL 3.0 Order ICD -->
<Order>
      <OrderHeader>
              <OrderNumber>
                      <BuyerOrderNumber>3</BuyerOrderNumber>
                      <SellerOrderNumber/>
                      <ListOfMessageID>
                              <MessageID>
                                      <IDNumber/>
                                      <IDAssignedBy>
                                              <IDAssignedByCoded/>
                                              <IDAssignedByCodedOther/>
                                      </IDAssignedBy>
                                      <IDAssignedDate/>
                              </MessageID>
                      </ListOfMessageID>
              </OrderNumber>

Lynda Van Vleet
E-Procurement Technical Specialist

Newark Electronics
4801 North Ravenswood Avenue
Chicago IL 60640-4496
773 907 5919


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list




 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



<Prev in Thread] Current Thread [Next in Thread>