XML Editor
Sign up for a WebBoard account Sign Up Keyword Search Search More Options... Options
Chat Rooms Chat Help Help News News Log in to WebBoard Log in Not Logged in
Show tree view Topic
Topic Page 1 2 3 4 5 6 7 8 9 Go to previous topicPrev TopicGo to next topicNext Topic
Posttop
Hind HakamiSubject: Deleate element except one of its children (UPDATED)
Author: Hind Hakami
Date: 18 May 2006 03:08 PM
Originally Posted: 16 May 2006 03:31 PM
Hello,

I'm new to xslt, and I need some help in correcting my xslt code so it can do the following:

If "UML:Package" element has "xmi.idref" attribute then delete its grandPa element block.
Otherwise: If "UML:Package" element doesn't has "xmi.idref" attribute then delete "UML:Package" element except the content of its of its chiled element "UML:Namespace.ownedElement".

XSLT Code:
<?xml version='1.0' ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:UML="org.omg.xmi.namespace.UML" xmlns:a="http://graphml.graphdrawing.org/xmlns/graphml">
<xsl:output method="xml"/>
<xsl:template match="/">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="*">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="UML:Namespace.ownedElement[local-name(parent::*[1]) = 'Model']">
<xsl:element name="UML:Namespace.ownedElement">
<xsl:call-template name="graphml"/>
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</xsl:copy>
<!--<xsl:copy-of select="descendant::UML:Namespace.ownedElement/*"/>
<xsl:call-template name="package"/> -->
</xsl:element>
</xsl:template>
<xsl:template name="graphml">
<xsl:for-each select="//a:graphml/.//a:cluster">
<xsl:choose>
<xsl:when test="count(child::*) &gt; 1">
<xsl:variable name="cOne" select="child::*[1]/@name"/>
<xsl:variable name="cTwo" select="child::*[2]/@name"/>
<xsl:if test="not((count(child::*) = '2') and ((contains($cOne, '.java') and contains($cOne, $cTwo)) or (contains($cTwo, '.java') and contains($cTwo, $cOne))))">
<xsl:element name="UML:Component">
<xsl:attribute name="xmi.id">
<xsl:text>.:000</xsl:text>
<xsl:value-of select="@id"/>
</xsl:attribute>
<xsl:attribute name="isSpecification">false</xsl:attribute>
<xsl:attribute name="isRoot">false</xsl:attribute>
<xsl:attribute name="isLeaf">false</xsl:attribute>
<xsl:attribute name="isAbstract">false</xsl:attribute>
<xsl:copy-of select="@name"/>
<xsl:element name="UML:ModelElement.clientDependency">
<xsl:for-each select="a:node">
<xsl:element name="UML:Dependency">
<xsl:attribute name="xmi.idref">
<xsl:value-of select="@xmi.id"/>
</xsl:attribute>
<xsl:apply-templates/>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:element>
</xsl:if>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</xsl:template>

<xsl:template match="*[name(descendant::*[2]) = 'UML:Package']">
<xsl:choose>
<xsl:when test="string-length(descendant::UML:Package/@xmi.idref) &gt; 0"/>
<xsl:otherwise>
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:for-each select="child::*[1]">
<xsl:copy>
<xsl:copy-of select="@*"/>
</xsl:copy>
</xsl:for-each>
</xsl:copy>
</xsl:otherwise>
</xsl:choose>
</xsl:template>

<!--
<xsl:template match="UML:Package">
<xsl:choose>
<xsl:when test="string-length(@xmi.idref) &gt; 0">
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates select="descendant::UML:Namespace.ownedElement/*"/>
</xsl:copy>
</xsl:when>
<xsl:otherwise>
<xsl:copy>
<xsl:copy-of select="@*"/>
<xsl:apply-templates select="*"/>
</xsl:copy>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
-->

<xsl:template match="a:graphml"/>
</xsl:stylesheet>

Thanks in Advance,
Hind


DocumentFix.zip

 
Topic Page 1 2 3 4 5 6 7 8 9 Go to previous topicPrev TopicGo to next topicNext Topic
Download A Free Trial of Stylus Studio 6 XML Professional Edition Today! Powered by Stylus Studio, the world's leading XML IDE for XML, XSLT, XQuery, XML Schema, DTD, XPath, WSDL, XHTML, SQL/XML, and XML Mapping!  
go

Log In Options

Site Map | Privacy Policy | Terms of Use | Trademarks
Stylus Scoop XML Newsletter:
W3C Member
Stylus Studio® and DataDirect XQuery ™are from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2016 All Rights Reserved.