At 2006-05-12 00:11 -0700, Hind Al-Hakami wrote:
How can I do the following:
If "UML:Package" has "xmi.idref" attribute then delete
its grand-Pa element bolck. Otherwise
delete "UML:Package" element except the children of
its child element "UML:Namespase.ownedElement"
...
XSLT Code:
<xsl:template match="*[name(descendant::*[2]) =
'UML:Package']">
<xsl:choose>
<xsl:when
test="string-length(descendant::UML:Package/@xmi.idref)
> 0"/>
</xsl:choose>
</xsl:template>
A few things about the above:
(1) the predicate "[2]" will check the second of all of the
descendants *in document order*, not in depth, so the test of
"grandchildren" would be done directly with XPath steps
(2) it is unsafe and bad practice to check the names of
namespace-qualified information items because that incorporates the
use of an arbitrary prefix which may not match the input
(3) you have not written a test that would keep the element even if
there is no attribute on the grandchild ... your template rule
removes the element regardless of whether there is an attribute or not
(4) an attribute's presence is not best checked by checking its
string length; it is sufficient merely to address the attribute node
and the predicate will be false if the attribute is absent
I would rewrite your above statement, though I do not have time to
work with your test data, as:
<xsl:template match="*[*/UML:Package/@xmi.idref]"/>
You should also review the appropriateness of using "//" where you
have, as that is a big hit against performance and a common
inappropriate use of XPath by new users of XSLT.
I hope this helps.
. . . . . . Ken
--
Registration open for XSLT/XSL-FO training: Wash.,DC 2006-06-12/16
Also for XSLT/XSL-FO training: Minneapolis, MN 2006-07-31/08-04
Also for XML/XSLT/XSL-FO training:Birmingham,England 2006-05-22/25
World-wide on-site corporate, govt. & user group XML/XSL training.
G. Ken Holman mailto:gkholman(_at_)CraneSoftwrights(_dot_)com
Crane Softwrights Ltd. http://www.CraneSoftwrights.com/s/
Box 266, Kars, Ontario CANADA K0A-2E0 +1(613)489-0999 (F:-0995)
Male Cancer Awareness Aug'05 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>
--~--