This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: node extraction from on the basis of an element
- To: "Sunil Dua" <sdua at solutionsny dot com>
- Subject: Re: [xsl] node extraction from on the basis of an element
- From: Jeni Tennison <mail at jenitennison dot com>
- Date: Fri, 17 Aug 2001 09:30:56 +0100
- CC: xsl-list at lists dot mulberrytech dot com
- Organization: Jeni Tennison Consulting Ltd
- References: <000101c12692$1a53e130$ac91fea5@Sunil>
- Reply-To: xsl-list at lists dot mulberrytech dot com
Hi Sunil,
> I have a block of XML where one element my have more then one type
> of data as "<type>" element may have either data like profession or
> topic or specialty. I want to extract only those node which have a
> type profession.
>
> <cc:keywords>
> <cc:keyword>
> <type>profession</type>
> <ID>1071</ID>
> <langstring lang="en_US">Physician</langstring>
> </cc:keyword>
> <cc:keyword>
> <type>specialty</type>
> <ID>102</ID>
> <langstring lang="en_US">CLINICAL</langstring>
> </cc:keyword>
> <cc:keyword>
> <type>specialty</type>
> <ID>115</ID>
> <langstring lang="en_US">INFECTIOUS DISEASE</langstring>
> </cc:keyword>
> </cc:keywords>
This piece of XML is well-formed, but it doesn't conform to the
namespaces Recommendation because it doesn't have a namespace
declaration for the 'cc' prefix, so an XSLT processor won't be able to
use it. Assuming it actually looks like:
<cc:keywords xmlns:cc="http://www.cecity.com/xml/cecity_classification">
...
</cc:keywords>
I'm also going to assume that you don't have a default namespace
declaration in your source XML document. If you do, then the answer is
different.
You need to declare the
http://www.cecity.com/xml/cecity_classification namespace in your
stylesheet:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:cc="http://www.cecity.com/xml/cecity_classification">
...
</xsl:stylesheet>
then you need to start from the root node:
/
travel down step by step to the cc:keyword elements:
/cc:keywords/cc:keyword
and use a predicate to identify those whose child type element (in no
namespace) is equal to the string 'profession':
/cc:keywords/cc:keyword[type = 'profession']
I hope that helps,
Jeni
---
Jeni Tennison
http://www.jenitennison.com/
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list