You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cocoon.apache.org by Anna Afonchenko <an...@ubaccess.com> on 2002/12/18 14:01:42 UTC

XPath problem in Cocoon?

Hi all.
Another question for today:
I wrote a small xsl that matches p nodes from the input and prints their content.
I wrote it like this:
<xsl:template match="/">
    <xsl:for-each select="//p">
        <xsl:text>Content of this tag is </xsl:text>
        <xsl:value-of select="."/>
    </xsl:for-each>
</xsl:template>

Then I run this stylesheet through cocoon pipeline.
I get empty result, e.g. the for-each didn't match any p node in the input xml file.
But there are p tags in the input.
Moreover, if I change the for-each statement to
<xsl:for-each select="descendant::node()[name()='p']">
It executes correctly!

Can anyone explain to me, why Cocoon doesn't match //node-name?
In XPath both //node-name and descendant::node()[name()='node-name'] have the same meaning.
I dont want to use descendant::... style because I have this stylesheet get the XPath expression to match from some external xml file, and it is really a headache (if possible at all) to change all my //node-name expressions to descendant::node()[name()='node-name'] style.

Please explain this mistery to me.

Thank you very much for help.
I know I am writing too many e-mails to the group these days, but since I am very new to Cocoon, I get stuck every few minutes on something new.

Regards,
Anna

Re: XPath problem in Cocoon?

Posted by Joerg Heinicke <jo...@gmx.de>.
For me it looks like a problem with a default namespace. Is anywhere in 
the XML something like:

<element xmlns="http://www.foo.com">
   <p>one of your paragraphs</p>
</element>

??

Then you must bind this namespace to a namespace-prefix in the XSLT:

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:foo="http://www.foo.com">

<xsl:template match="/">
   <xsl:for-each select="foo:p">
     <!-- does this work? -->
   </xsl:for-each>
</xsl:template>

</xsl:stylesheet>

Regards,

Joerg

Anna Afonchenko wrote:
> Hi Konstantin.
> I know that my stylesheet works without Cocoon, I ran it through the batch
> file, using saxon. Even if I just run it using XSL Transformation of XMLSpy,
> it works fine, and chooses the //p tags as it should.
> So I am sure the problem is with Cocoon, but I don't understand, if it's my
> problem giving cocoon some wrong parameters (I don't know how this could
> happen) or maybe it is Cocoon problem? Using //node-name is a common XPath
> expression, it should work.
> 
> Maybe somebody knows what's wrong?
> Does nobody having problems with matching this kind of XPath expression in
> Cocoon?
> It is very important for me, so if somebody can give me a hint of where the
> problem lies, I would really appreciate this.
> 
> Thank you very much for helping
> 
> Anna
> 
> ----- Original Message -----
> From: "Konstantin Piroumian" <kp...@apache.org>
> To: <co...@xml.apache.org>
> Sent: Wednesday, December 18, 2002 3:17 PM
> Subject: Re: XPath problem in Cocoon?
> 
> 
> Anna,
> (please avoid HTML emails)
> 
> Cocoon uses underlying XSLT engine to perform the transformation, so either
> this is just an XSLT problem in your code or a problem of the Xalan or XSLTC
> (which one is used).
> 
> You can simply check if your stylesheet works without Cocoon: run Xalan from
> the command line with your XML as input and see what happens.
> 
> Konstantin
> 
> ----- Original Message -----
> From: Anna Afonchenko
> To: cocoon-users
> Sent: Wednesday, December 18, 2002 16:01
> Subject: XPath problem in Cocoon?
> 
> 
> Hi all.
> Another question for today:
> I wrote a small xsl that matches p nodes from the input and prints their
> content.
> I wrote it like this:
> <xsl:template match="/">
>     <xsl:for-each select="//p">
>         <xsl:text>Content of this tag is </xsl:text>
>         <xsl:value-of select="."/>
>     </xsl:for-each>
> </xsl:template>
> 
> Then I run this stylesheet through cocoon pipeline.
> I get empty result, e.g. the for-each didn't match any p node in the input
> xml file.
> But there are p tags in the input.
> Moreover, if I change the for-each statement to
> <xsl:for-each select="descendant::node()[name()='p']">
> It executes correctly!
> 
> Can anyone explain to me, why Cocoon doesn't match //node-name?
> In XPath both //node-name and descendant::node()[name()='node-name'] have
> the same meaning.
> I dont want to use descendant::... style because I have this stylesheet get
> the XPath expression to match from some external xml file, and it is really
> a headache (if possible at all) to change all my //node-name expressions to
> descendant::node()[name()='node-name'] style.
> 
> Please explain this mistery to me.
> 
> Thank you very much for help.
> I know I am writing too many e-mails to the group these days, but since I am
> very new to Cocoon, I get stuck every few minutes on something new.
> 
> Regards,
> Anna
> 
> 
> ---------------------------------------------------------------------
> Please check that your question  has not already been answered in the
> FAQ before posting.     <http://xml.apache.org/cocoon/faq/index.html>
> 
> To unsubscribe, e-mail:     <co...@xml.apache.org>
> For additional commands, e-mail:   <co...@xml.apache.org>
> 
> 
> ---------------------------------------------------------------------
> Please check that your question  has not already been answered in the
> FAQ before posting.     <http://xml.apache.org/cocoon/faq/index.html>
> 
> To unsubscribe, e-mail:     <co...@xml.apache.org>
> For additional commands, e-mail:   <co...@xml.apache.org>
> 
> 


---------------------------------------------------------------------
Please check that your question  has not already been answered in the
FAQ before posting.     <http://xml.apache.org/cocoon/faq/index.html>

To unsubscribe, e-mail:     <co...@xml.apache.org>
For additional commands, e-mail:   <co...@xml.apache.org>


Re: XPath problem in Cocoon?

Posted by Anna Afonchenko <an...@ubaccess.com>.
Hi Luca.
Thank you so much for help.
Here are all my components:

1. the pipeline:

<map:match pattern="*.html">
    <map:generate src="{1}.html" type="html"/>
    <map:transform src="test.xsl"/>
    <map:serialize type="xml"/>
</map:match>

2. the imput file (test.html):

<html>
 <head>
  <title>Untitled</title>
 </head>
 <body>
  <p>some text</p>
 </body>
</html>

3. the xsl (test.xsl):

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:saxon="http://icl.com/saxon"
extension-element-prefixes="saxon">

<xsl:template match="/">
 <xsl:element name="root">
  <xsl:text>HELLO </xsl:text>
  <xsl:for-each select="//p">
   <xsl:text>P content = </xsl:text>
   <xsl:value-of select="."/>
  </xsl:for-each>
 </xsl:element>
</xsl:template>
</xsl:stylesheet>

As you can see, with such xml and xsl I should have one match for p element
and it's content should be output inside the root element. But it just
doesn't happen, it doesn't match the node. And now the interesting part
strats:
If I replace the select attribute of xsl:for-each to be
"descendant::node()[name()='p']"
instead of just "//p" (those two expressions mean exactly the same in the
XPath),
I suddenly get the match and the right answer from Cocoon.
Also, if I run this stylesheet externally of Cocoon (for example, using
XMLSpy XSLTransformation tool) I get the right answer for match "//p".

So I know that my stylesheet is OK, but I can't understand why it doesn't
work from Cocoon.
If somebody can explain this thing for me, I would be more than happy,
because I can't use the descendant::... style instead the // style in my
real (big) stylesheet.

Thank you all very much.
Hope somebody can help me with this.

Regards,
Anna


----- Original Message -----
From: "Luca Morandini" <lu...@tin.it>
To: <co...@xml.apache.org>
Sent: Wednesday, December 18, 2002 11:24 PM
Subject: RE: XPath problem in Cocoon?


Anna,

ok, let's try to sort it out, send us:

- The pipeline
- The XML to be transformed
- The XSLT

Possibly, strip off all the unnecessary stuff.

Best regards,

---------------------------------------------
               Luca Morandini
               GIS Consultant
              lmorandini@ieee.org
http://utenti.tripod.it/lmorandini/index.html
---------------------------------------------


> -----Original Message-----
> From: Anna Afonchenko [mailto:anna@ubaccess.com]
> Sent: Wednesday, December 18, 2002 3:25 PM
> To: cocoon-users@xml.apache.org
> Subject: Re: XPath problem in Cocoon?
>
>
> Hi Konstantin.
> I know that my stylesheet works without Cocoon, I ran it through the batch
> file, using saxon. Even if I just run it using XSL Transformation of
XMLSpy,
> it works fine, and chooses the //p tags as it should.
> So I am sure the problem is with Cocoon, but I don't understand, if it's
my
> problem giving cocoon some wrong parameters (I don't know how this could
> happen) or maybe it is Cocoon problem? Using //node-name is a common XPath
> expression, it should work.
>
> Maybe somebody knows what's wrong?
> Does nobody having problems with matching this kind of XPath expression in
> Cocoon?
> It is very important for me, so if somebody can give me a hint of where
the
> problem lies, I would really appreciate this.
>
> Thank you very much for helping
>
> Anna
>


---------------------------------------------------------------------
Please check that your question  has not already been answered in the
FAQ before posting.     <http://xml.apache.org/cocoon/faq/index.html>

To unsubscribe, e-mail:     <co...@xml.apache.org>
For additional commands, e-mail:   <co...@xml.apache.org>


---------------------------------------------------------------------
Please check that your question  has not already been answered in the
FAQ before posting.     <http://xml.apache.org/cocoon/faq/index.html>

To unsubscribe, e-mail:     <co...@xml.apache.org>
For additional commands, e-mail:   <co...@xml.apache.org>


RE: XPath problem in Cocoon?

Posted by Luca Morandini <lu...@tin.it>.
Anna,

ok, let's try to sort it out, send us:

- The pipeline
- The XML to be transformed
- The XSLT

Possibly, strip off all the unnecessary stuff.

Best regards,

--------------------------------------------- 
               Luca Morandini 
               GIS Consultant 
              lmorandini@ieee.org 
http://utenti.tripod.it/lmorandini/index.html 
---------------------------------------------
 

> -----Original Message-----
> From: Anna Afonchenko [mailto:anna@ubaccess.com]
> Sent: Wednesday, December 18, 2002 3:25 PM
> To: cocoon-users@xml.apache.org
> Subject: Re: XPath problem in Cocoon?
> 
> 
> Hi Konstantin.
> I know that my stylesheet works without Cocoon, I ran it through the batch
> file, using saxon. Even if I just run it using XSL Transformation of XMLSpy,
> it works fine, and chooses the //p tags as it should.
> So I am sure the problem is with Cocoon, but I don't understand, if it's my
> problem giving cocoon some wrong parameters (I don't know how this could
> happen) or maybe it is Cocoon problem? Using //node-name is a common XPath
> expression, it should work.
> 
> Maybe somebody knows what's wrong?
> Does nobody having problems with matching this kind of XPath expression in
> Cocoon?
> It is very important for me, so if somebody can give me a hint of where the
> problem lies, I would really appreciate this.
> 
> Thank you very much for helping
> 
> Anna
> 


---------------------------------------------------------------------
Please check that your question  has not already been answered in the
FAQ before posting.     <http://xml.apache.org/cocoon/faq/index.html>

To unsubscribe, e-mail:     <co...@xml.apache.org>
For additional commands, e-mail:   <co...@xml.apache.org>


Re: XPath problem in Cocoon?

Posted by Anna Afonchenko <an...@ubaccess.com>.
Hi Konstantin.
I know that my stylesheet works without Cocoon, I ran it through the batch
file, using saxon. Even if I just run it using XSL Transformation of XMLSpy,
it works fine, and chooses the //p tags as it should.
So I am sure the problem is with Cocoon, but I don't understand, if it's my
problem giving cocoon some wrong parameters (I don't know how this could
happen) or maybe it is Cocoon problem? Using //node-name is a common XPath
expression, it should work.

Maybe somebody knows what's wrong?
Does nobody having problems with matching this kind of XPath expression in
Cocoon?
It is very important for me, so if somebody can give me a hint of where the
problem lies, I would really appreciate this.

Thank you very much for helping

Anna

----- Original Message -----
From: "Konstantin Piroumian" <kp...@apache.org>
To: <co...@xml.apache.org>
Sent: Wednesday, December 18, 2002 3:17 PM
Subject: Re: XPath problem in Cocoon?


Anna,
(please avoid HTML emails)

Cocoon uses underlying XSLT engine to perform the transformation, so either
this is just an XSLT problem in your code or a problem of the Xalan or XSLTC
(which one is used).

You can simply check if your stylesheet works without Cocoon: run Xalan from
the command line with your XML as input and see what happens.

Konstantin

----- Original Message -----
From: Anna Afonchenko
To: cocoon-users
Sent: Wednesday, December 18, 2002 16:01
Subject: XPath problem in Cocoon?


Hi all.
Another question for today:
I wrote a small xsl that matches p nodes from the input and prints their
content.
I wrote it like this:
<xsl:template match="/">
    <xsl:for-each select="//p">
        <xsl:text>Content of this tag is </xsl:text>
        <xsl:value-of select="."/>
    </xsl:for-each>
</xsl:template>

Then I run this stylesheet through cocoon pipeline.
I get empty result, e.g. the for-each didn't match any p node in the input
xml file.
But there are p tags in the input.
Moreover, if I change the for-each statement to
<xsl:for-each select="descendant::node()[name()='p']">
It executes correctly!

Can anyone explain to me, why Cocoon doesn't match //node-name?
In XPath both //node-name and descendant::node()[name()='node-name'] have
the same meaning.
I dont want to use descendant::... style because I have this stylesheet get
the XPath expression to match from some external xml file, and it is really
a headache (if possible at all) to change all my //node-name expressions to
descendant::node()[name()='node-name'] style.

Please explain this mistery to me.

Thank you very much for help.
I know I am writing too many e-mails to the group these days, but since I am
very new to Cocoon, I get stuck every few minutes on something new.

Regards,
Anna


---------------------------------------------------------------------
Please check that your question  has not already been answered in the
FAQ before posting.     <http://xml.apache.org/cocoon/faq/index.html>

To unsubscribe, e-mail:     <co...@xml.apache.org>
For additional commands, e-mail:   <co...@xml.apache.org>


---------------------------------------------------------------------
Please check that your question  has not already been answered in the
FAQ before posting.     <http://xml.apache.org/cocoon/faq/index.html>

To unsubscribe, e-mail:     <co...@xml.apache.org>
For additional commands, e-mail:   <co...@xml.apache.org>


Re: XPath problem in Cocoon?

Posted by Konstantin Piroumian <kp...@apache.org>.
Anna,
(please avoid HTML emails)

Cocoon uses underlying XSLT engine to perform the transformation, so either
this is just an XSLT problem in your code or a problem of the Xalan or XSLTC
(which one is used).

You can simply check if your stylesheet works without Cocoon: run Xalan from
the command line with your XML as input and see what happens.

Konstantin

----- Original Message -----
From: Anna Afonchenko
To: cocoon-users
Sent: Wednesday, December 18, 2002 16:01
Subject: XPath problem in Cocoon?


Hi all.
Another question for today:
I wrote a small xsl that matches p nodes from the input and prints their
content.
I wrote it like this:
<xsl:template match="/">
    <xsl:for-each select="//p">
        <xsl:text>Content of this tag is </xsl:text>
        <xsl:value-of select="."/>
    </xsl:for-each>
</xsl:template>

Then I run this stylesheet through cocoon pipeline.
I get empty result, e.g. the for-each didn't match any p node in the input
xml file.
But there are p tags in the input.
Moreover, if I change the for-each statement to
<xsl:for-each select="descendant::node()[name()='p']">
It executes correctly!

Can anyone explain to me, why Cocoon doesn't match //node-name?
In XPath both //node-name and descendant::node()[name()='node-name'] have
the same meaning.
I dont want to use descendant::... style because I have this stylesheet get
the XPath expression to match from some external xml file, and it is really
a headache (if possible at all) to change all my //node-name expressions to
descendant::node()[name()='node-name'] style.

Please explain this mistery to me.

Thank you very much for help.
I know I am writing too many e-mails to the group these days, but since I am
very new to Cocoon, I get stuck every few minutes on something new.

Regards,
Anna


---------------------------------------------------------------------
Please check that your question  has not already been answered in the
FAQ before posting.     <http://xml.apache.org/cocoon/faq/index.html>

To unsubscribe, e-mail:     <co...@xml.apache.org>
For additional commands, e-mail:   <co...@xml.apache.org>