The code you supplied will not work.

With XML like:
<rootElement>
<captcha/>
<captcha/>
...
<captcha>returnValue</captcha>
</rootElement>

You would expect returnValue to be the text contents of the last
captcha element under root.  returnValue will be placed in a session
attribute and used in pipeline variables.
<map:transform src="variables.xsl">
<map:parameter name="nodeFromSession" value="{session-attr:captcha-result}"/>
<map:parameter name="nodeFromFlow" value="{flow-attribute:captcha-result}"/>

The nodeValue of an element is always blank.  Much of the W3C's role
is protecting the jobs of IT professionals.  W3C XML has a layer of
extra nodes that interfere with comprehension by normal people.  For
<myNode>myText</myNode>, the XML is like:
Node("myNode").getChild("#text").getNodeValue()
Assuming the node has no children elements, use this function:

function getText(node){
   var text = "";
   if(node.getFirstChild() != null) text = node.getFirstChild().getNodeValue();
   return text;
}

I use print statements to test my JS.  The results appear on the console.
var captchaUserEntry = captchaUserEntries.item(i);
var captchaUserContent = getText(captchaUserEntry);
print("" + i + "=" + captchaUserContent);

I am uncertain about scope in JavaScript.  I would never declare a
variable inside a block and expect the variable to be available
outside the block, but that rule is a LCD from using many programming
languages.  If JS had an issue, this code should error about accessing
a missing property "nodeValue" from a null object.

For other reading, Cocoon has a standard unstable "captcha" block that
has been discussed on the Cocoon and Lenya MLs.

solprovider


On 10/7/07, Josh2007 <[EMAIL PROTECTED]> wrote:
> Everything works fine with the function.
> I've been able to retrieve my xml and to fetch the required node.
> Problem, I can't fetch any nodeValue.
>
> To check, I save the node.nodeValue content in a session attribute and try
> to get this attribute content back to the browser. Each time I get an empty
> result.
> If I ask for the nodeName or node attribute, I get the required result. It
> only fails with nodeValue or data.
>
> Here's my flowscript, based on the link you sent to me. Hopefully you know
> what I'm doing wrong :
> function getCaptchaUserEntry() {
>   // retrieve the XML
>   var xml = loadDocument("cocoon:/get-stream");
>   // get the root element:
>   var root = xml.getDocumentElement();
>   // get captcha elements (actually only 1 captcha element is allowed in the
> xforms)
>   var captchaUserEntries = root.getElementsByTagName("captcha");
>   // get captcha node
>   for (var i = 0; i < captchaUserEntries.getLength(); i++) {
>       var captchaUserEntry = captchaUserEntries.item(i);
>   }
>   // get required content
>   var captchaUserContent = captchaUserEntry.nodeValue;
>   // save in session - to debugg
>   var session = cocoon.session;
>   session.setAttribute("captcha-result", captchaUserContent);
>   // ---------------------------
>   var parameters = null;
>   parameters = {
>       "captcha-result": captchaUserContent,
>     };
>   cocoon.sendPage("check-session", parameters);
> }
> Thanks,
> Josh

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to