This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Copying only attributes, no element


Hi,

> My XML is
> 
> <ROWSET>
>  <ROW id="1">
>              <NAME>Name1 (Mod)</NAME>
>       <STRING>String1 (Mod)</STRING>
>  </ROW>
>  <ROW id="2">
>              <STRING>String2 (Mod)</STRING>
>  </ROW>
[...]
> </ROWSET>
> 
> 
> How can with an XPath expresion get
> 
>  <ROWSET>
>  <ROW id="1">
> 
>  </ROW>
>  <ROW id="2">
[...]
> </ROWSET>
> 
> (Copy only attributes, no element)
> 
[...]
> <xsl:copy-of select="ROWSET/ROW[@id]"
> Don't work

This would make a deep copy all ROW elements which have an id attribute.

The solution is to use xsl:copy only for those elements you want to copy.
You can't use a single XPath expression for this purpose.

<xsl:template match="ROW">
   <!-- copy ROW -->
   <xsl:copy>
      <!-- copy attributes -->
      <xsl:copy-of select="@id" />   <!-- or select="@*" for all attributes -->
      <!-- ignore the children -->
   </xsl:copy>
</xsl:template>

<xsl:template match="ROWSET">
   <!-- copy ROWSET -->
   <xsl:copy>
      <!-- assuming you don't have attributes in a ROWSET element -->
      <!-- process children -->
      <xsl:apply-templates />
   </xsl:copy>
</xsl:template>

Cheers,
Oliver


/-------------------------------------------------------------------\
|  ob|do        Dipl.Inf. Oliver Becker                             |
|  --+--        E-Mail: obecker@informatik.hu-berlin.de             |
|  op|qo        WWW:    http://www.informatik.hu-berlin.de/~obecker |
\-------------------------------------------------------------------/


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]