This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: Copying only attributes, no element
- To: xsl-list at lists dot mulberrytech dot com
- Subject: Re: [xsl] Copying only attributes, no element
- From: Oliver Becker <obecker at informatik dot hu-berlin dot de>
- Date: Thu, 5 Apr 2001 17:11:12 +0200 (MET DST)
- Reply-To: xsl-list at lists dot mulberrytech dot com
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