xsl-list
[Top] [All Lists]

RE: [xsl] node functions

2008-08-05 10:48:07
From: Michael Kay <mike(_at_)saxonica(_dot_)com>
Subject: RE: [xsl] node functions
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Date: Tuesday, August 5, 2008, 3:20 PM

Your source document doesn't have any attributes on pub
elements: but it
does have an element called level1 which is the parent of
the pub element.
Are you confused, or are you just trying to confuse the
rest of us?

element <pub> can occur anywhere after <info> in the xml. Here is the example 
with the attribute level to pub. 
--------------------------------------------------
<test2>
<info>
 <requirement>
 <level1>
 <para></para>
<pub level="1"></pub>
 </level1>
 </requirement>
 </info>
 </test2>

--------------------------------------------------


I tried:
 
This is obv wrong because the processor complains
about it.

1. not() is a function call, therefore it requires round
brackets ()

2. a filter predicate is always written in square brackets.

3. both kinds of brackets have to match up!

So that corrects the grammar to:

//info[not(self::pub[(_at_)level='1'])]

That was a typo. Sorry about that. 

4. An info element will never be a pub element, so you
don't want the self::
axis here, you want some other axis. In your example pub is
nested several
layers below info - but that pub element doesn't have a
level attribute, so
perhaps your source document isn't useful as a guide.

Please see the new example above. 

5. If the select attribute of apply-templates doesn't
select anything, then
it does nothing, so you don't need to test it first in
an xsl:if or
xsl:choose.

6. You might be better off applying templates to all the
elements, and
having different template rules to process those with
level="1" and those
with a different level.

Thank you. I will try that.


--~------------------------------------------------------------------
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>
--~--


--- On Tue, 8/5/08, Michael Kay <mike(_at_)saxonica(_dot_)com> wrote:

From: Michael Kay <mike(_at_)saxonica(_dot_)com>
Subject: RE: [xsl] node functions
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Date: Tuesday, August 5, 2008, 3:20 PM
file2.xml
<test2>
<info>
<requirement>
<level1>
<para></para>
<pub></pub>
</level1>
</requirement>
</info>
</test2>


So, info and pub are two common elements between there
two 
xml files. So there is a common style sheet just for
pub 
called pub.xsl. pub has an attribute level which can
be set to 1~4.
But in one commong style sheet, I want to apply
templates for 
all //info elements and not include //pub elements
which have 
@level='1'

Your source document doesn't have any attributes on pub
elements: but it
does have an element called level1 which is the parent of
the pub element.
Are you confused, or are you just trying to confuse the
rest of us?

I tried:

<xsl:choose>
<xsl:when
test="//info(not[self::pub[(_at_)level='1']">

<xsl:apply-templates
select="//info(not[self::pub[(_at_)level='1']">
</xsl:when>
</xsl:choose>

This is obv wrong because the processor complains
about it.

1. not() is a function call, therefore it requires round
brackets ()

2. a filter predicate is always written in square brackets.

3. both kinds of brackets have to match up!

So that corrects the grammar to:

//info[not(self::pub[(_at_)level='1'])]

4. An info element will never be a pub element, so you
don't want the self::
axis here, you want some other axis. In your example pub is
nested several
layers below info - but that pub element doesn't have a
level attribute, so
perhaps your source document isn't useful as a guide.

5. If the select attribute of apply-templates doesn't
select anything, then
it does nothing, so you don't need to test it first in
an xsl:if or
xsl:choose.

6. You might be better off applying templates to all the
elements, and
having different template rules to process those with
level="1" and those
with a different level.

Michael Kay
http://www.saxonica.com/



--~------------------------------------------------------------------
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>
--~--


      


--~------------------------------------------------------------------
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>
--~--

<Prev in Thread] Current Thread [Next in Thread>