[xsl] Re: dynamic xpath from variable evaluate function is failing

Subject: [xsl] Re: dynamic xpath from variable evaluate function is failing
From: M Balaji <msbalaji82@xxxxxxxxx>
Date: Mon, 22 Oct 2012 11:11:03 +0530
I need to construct the dynamic XPATH predicate from the input XML. I tried
with evaluate function, but  its not converting the String to XPATH
predicate. Can any one let me know how can I achieve this?

 Input: test.xml

<a>

<b test="(x=Windows)">content</b>

<b test="(z=Unix)">content</b>

<b test="(y=Unix) and (y=Solaris)">content</b>

<b test="(z=Unix) and (y=Windows7)">content</b>

</a>

Configuration/condition evaluation file (config.xml)

<root>

<condition name="x" value="Windows8"/>

<condition name="z" value="Unix"/>

<condition name="y" value="Solaris"/>

<condition name="y" value="Windows7"/>

</root>

XSLT: test.xsl

<xsl:variable name="conlist"><s><xsl:for-each
select="document('config.xml')// condition"><xsl:element
name="{@name}">test</xsl:element><xsl:element
name="{@value}">test</xsl:element></xsl:for-each></s></xsl:variable>

<xsl:template match="*[@test]">

<xsl:param name="t" select="concat('$', conlist,'//s','[',@test,']')"/>



<xsl:if test='saxon:evaluate("$p1",$t)'>

<xsl:copy-of select="."/>

</xsl:if>



</xsl:template>


Result:

I'm getting true for all above <b> elements

Expected result:

1st and 3rd <b> should not printed in the output (condition is failing)


Thanks in Advance,

Balaji. M


On Mon, Oct 22, 2012 at 11:04 AM, M Balaji <msbalaji82@xxxxxxxxx> wrote:
> I need to construct the dynamic XPATH predicate from the input XML. I tried
> with evaluate function, but  its not converting the String to XPATH
> predicate. Can any one let me know how can I achieve this?
>
>  Input: test.xml
>
> <a>
>
> <b test=3D=94(x=3DWindows)=94>content</b>
>
> <b test=3D=94(z=3DUnix)=94>content</b>
>
> <b test=3D=94(y=3DUnix) and (y=3DSolaris)=94>content</b>
>
> <b test=3D=94(z=3DUnix) and (y=3DWindows7)=94>content</b>
>
> </a>
>
> Configuration/condition evaluation file (config.xml)
>
> <root>
>
> <condition name=3D=94x=94 value=3D=94Windows8=94/>
>
> <condition name=3D=94z=94 value=3D=94Unix=94/>
>
> <condition name=3D=94y=94 value=3D=94Solaris=94/>
>
> <condition name=3D=94y=94 value=3D=94Windows7=94/>
>
> </root>
>
> XSLT: test.xsl
>
> <xsl:variable name=3D"conlist"><s><xsl:for-each
> select=3D"document('config.xml')// condition"><xsl:element
> name=3D"{@name}">test</xsl:element><xsl:element
> name=3D"{@value}">test</xsl:element></xsl:for-each></s></xsl:variable>
>
> <xsl:template match=3D=94*[@test]=94>
>
> <xsl:param name=3D"t" select=3D"concat('$', conlist,'//s','[',@test,']')"/>
>
>
>
> <xsl:if test=3D'saxon:evaluate("$p1",$t)'>
>
> <xsl:copy-of select=3D"."/>
>
> </xsl:if>
>
>
>
> </xsl:template>
>
>
> Result:
>
> I'm getting true for all above <b> elements
>
> Expected result:
>
> 1st and 3rd <b> should not printed in the output (condition is failing)
>
>
> Thanks in Advance,
>
> Balaji. M

Current Thread