467,915 Members | 1,166 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 467,915 developers. It's quick & easy.

XSL problem matching node containing xmlns attribute

Hi there,

Apologies if I'm posting to the wrong group; this one looked to be the
best match.

I'm having trouble writing a bit of XSL/XPATH and wondered if someone
would please shed some light. My XML is generated by InfoPath and of
the structure:

....
<my:Alpha>
<my:Beta>
<my:Gamma>
<div xmlns="http://www.w3.org/1999/xhtml">one line of text</div>
<div xmlns="http://www.w3.org/1999/xhtml">another one</div>
</my:Gamma>
</my:Beta>
<my:Beta>
<my:Gamma>just the one line here
</my:Gamma>
</my:Beta>
</my:Alpha>
....

Note the my:Gamma node - sometimes it will contain divs separating
pieces of text, other times just text. In my XSL I'm trying to test
whether my:Gamma contains divs (if it does, then I can get value-of
div, otherwise I can just get value-of my:Gamma).

I'm trying to use the below construct:

<xsl:choose>
<xsl:when test="div">
...
</xsl:when>
<xsl:otherwise>
...
</xsl:otherwise>
</xsl:choose>

This works if I get rid of the xmlns="http://www.w3.org/1999/xhtml"
from the div tags, but I can't seem to write a valid test condition in
the xsl:when that will find the full <div
xmlns="http://www.w3.org/1999/xhtml"tag. I thought <xsl:when
test="div[@*]"might work but it doesn't seem to, leading me to think
that 'xmlns' isn't classified as an attribute as such. Maybe it's
blindingly obvious but I haven't been able to find an answer!

Many thanks in advance.

Jan 22 '07 #1
  • viewed: 3698
Share:
4 Replies
clover2411 wrote:
<my:Gamma>
<div xmlns="http://www.w3.org/1999/xhtml">one line of text</div>
<div xmlns="http://www.w3.org/1999/xhtml">another one</div>
</my:Gamma>
<xsl:choose>
<xsl:when test="div">
<xsl:when test="xhtml:div" xmlns:xhtml="http://www.w3.org/1999/xhtml">
Usually you will put the namespae declaration
xmlns:xhtml="http://www.w3.org/1999/xhtml" on the xsl:stylesheet element.
--

Martin Honnen
http://JavaScript.FAQTs.com/
Jan 22 '07 #2
clover2411 <cl********@gmail.comwrote:
>
This works if I get rid of the xmlns="http://www.w3.org/1999/xhtml"
from the div tags, but I can't seem to write a valid test condition in
the xsl:when that will find the full <div
xmlns="http://www.w3.org/1999/xhtml"tag. I thought <xsl:when
test="div[@*]"might work but it doesn't seem to, leading me to think
that 'xmlns' isn't classified as an attribute as such. Maybe it's
blindingly obvious but I haven't been able to find an answer!
I think that's a question of name space

add to your <xsl:stylesheet version ...
the following :

xmlns:h="http://www.w3.org/1999/xhtml">

don't put xmlns="..." in your div tags.

but rather for example :

<xsl:when test="//h:div[@foo = 'bar]">
[...]

you'll have to prefix all xhtml element with h:
--
Artaban de Mde
Jan 22 '07 #3
Thanks very much for your replies, I've used the below suggestion which
works nicely (and put the namespace declaration on the xsl:stylesheet
element). Makes sense now I see it! :-)
<xsl:when test="xhtml:div" xmlns:xhtml="http://www.w3.org/1999/xhtml">

Usually you will put the namespae declaration
xmlns:xhtml="http://www.w3.org/1999/xhtml" on the xsl:stylesheet element.
Not sure why InfoPath generates div tags with namespace declarations on
them in the middle of a form though, it'd be easier if it didn't!

Jan 23 '07 #4

clover2411 wrote:
Not sure why InfoPath generates div tags with namespace declarations on
them in the middle of a form though, it'd be easier if it didn't!
No, it will be _exactly_ as easy to work with them, however they
appear. It's fundamental to XML that these namespacing rules don't care
where the attribute appears, they just care what's in scope.

How you code your XSLT is a separate problem. IMHE, always place your
own namespaces on the XSLT root xsl:stylesheet element and always use
an explicit namespace prefix, not the default. Although it's
technically possible to do it the other way, it's not humanly possible
to understand the source.

Jan 23 '07 #5

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

7 posts views Thread by Rolf Kemper | last post: by
2 posts views Thread by RichardHatcher.com | last post: by
11 posts views Thread by =?Utf-8?B?TTFpUw==?= | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.