If you evaluate
<b test="(y=Unix) and (y=Solaris)">content</b>
as an XPath expression the result will probably be false, because it means
<b test="(child::y=child::Unix) and (child::y=child::Solaris)">content</b>
and comparing two empty sequences using "=" gives false.
However, as far as I can tell the string value of conlist will be empty, so the
expression you are constructing is
$//[(y=Unix) and (y=Solaris)]
which would be a syntax error.
You would make your life a lot easier if the expressions in the conditions file
used XPath syntax, that is, quotes around the values.
Michael Kay
Saxonica
On 22/10/2012 06:41, M Balaji 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="(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(_at_)gmail(_dot_)com>
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
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--