You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@struts.apache.org by "Don Brown (JIRA)" <ji...@apache.org> on 2008/07/14 14:58:05 UTC

[jira] Commented: (WW-2234) XSLTResut.exposedValue transform failing on CDATA elements

    [ https://issues.apache.org/struts/browse/WW-2234?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=44371#action_44371 ] 

Don Brown commented on WW-2234:
-------------------------------

Could you post the code where you run the xslt transformation in your action and it works?  I'd like to see what you are doing different than to how the XSLTResult does it.

> XSLTResut.exposedValue transform failing on CDATA elements
> ----------------------------------------------------------
>
>                 Key: WW-2234
>                 URL: https://issues.apache.org/struts/browse/WW-2234
>             Project: Struts 2
>          Issue Type: Bug
>    Affects Versions: 2.0.9
>         Environment: Tomcat 6.0.14
> Struts 2.0.9
> JDK 1.5.0_11
> Xalan 2.7.0
>            Reporter: Stewart Witchalls
>            Priority: Minor
>             Fix For: 2.1.3
>
>
> Xalan 2.7.0 (with bundled Xerces) installed into $JDK_HOME/jre/lib/endorsed and $TOMCAT_HOME/common/endorsed
> action config:
>         <action name="ShowDataFormDemo" class="ShowDataFormDemo">
>             <result type="xslt">
>             	<param name="location">/WEB-INF/xsl/CreateDataForm.xsl</param>
>             	<param name="exposedValue">presenterXml</param>
>             </result>
>         </action>
> ShowDataFormDemo.presenterXml code:
>   public org.w3c.dom.Document getPresenterXml() throws Exception
>   {
> 	final byte[] data = this.presenterXml.getBytes("UTF-8");
>     	final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
>         final Document doc2 = factory.newDocumentBuilder().parse( new ByteArrayInputStream(data) );
>         // debug to see if XPATH works inside server
> 	final XPathFactory fact = XPathFactory.newInstance();
> 	final XPath xpath = fact.newXPath();
> 	final XPathExpression xexpr = xpath.compile( "count(//items/*)" );
> 	System.out.println( xexpr.evaluate( doc2.getDocumentElement(), XPathConstants.NUMBER ) );
> 	return doc2;
>   }
> XML:
> <data>
> <items>
> <heading inline="true">
> <text><![CDATA[Data form example]]></text></heading>
> <paragraph inline="true">
> <text><![CDATA[Some explanatory text.]]></text></paragraph>
> <subHeading inline="true">
> <text><![CDATA[Lists]]></text></subHeading>
> </items>
> </data>
> CreateDataForm.xsl fragment:
>     vendor = <xsl:value-of select="system-property('xsl:vendor')"/>
>     vendor-url = <xsl:value-of select="system-property('xsl:vendor-url')"/>
>     xslt-version = <xsl:value-of select="system-property('xsl:version')"/>
>     count(items) = <xsl:value-of select="count(//items/*)"/>
> XPath in code works and returns correct count (aka. 3).
> However, same xpath in CreateDataForm.xsl transform fails and only returns 1. Also, transform not able to obtain CDATA values (ie. displays nothing when "text" element selected).
> I've removed + added rows to the XML. The CreateDataForm.xsl transform always says count = "1". It looks like it cannot see past the first CDATA section.
> If I remove the CDATA sections (ie. encode the element data as XML encoded strings), transform xpath works??!!
> I've checked classpaths and can confirm that the endorsed Xalan libraries are being picked up.
> I've even run the transform inside the action itself. It worked as expected.
> I can work around this by removing the CDATA sections from the XML, but I've spent the last few days going mad. Just cannot see what's going wrong.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.