This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
How to execute an expression XPATH in String
- From: CAO Tuan Dung <Tuan-Dung dot Cao at sophia dot inria dot fr>
- To: xsl-list at lists dot mulberrytech dot com
- Date: Mon, 17 Jun 2002 11:47:54 +0200
- Subject: [xsl] How to execute an expression XPATH in String
- Reply-to: xsl-list at lists dot mulberrytech dot com
Hi all the experts,
I'm a beginner in XSLT and i'm meet some problem so difficult.
I have an webpage XHTML and I want to extract all the value at address
XPATH as:
/html/body/table/tr[1]/td[2]/p
/html/body/table/tr[1]/td[3]/p
/html/body/table/tr[1]/td[4]/p
...... and so on
as well as /html/body/table/tr[2]/td[2]/p
/html/body/table/tr[3]/td[2]/p
......
so i write a template with 3 parameter: $path: for an expression XPATH
$tag:
for the tag at which the index change repeatly as: TR, TD, p, a, Table,..
$index: for the index to change.
and call the template recursively.
<xsl:template name="GetAllValue">
<xsl:param name="path" />
<xsl:param name="tag" />
<xsl:param name="index" />
<xsl:variable name= "tagindex" select "concat($tag,'[',$index,']')" />
<xsl:variable name="titi" select=
"xalan:evaluate(concat(substring-before($path,$tagindex),$tagindex,substring-after($path,$tagindex)))"/>
<xsl:choose>
<xsl:when test="string-length($titi) = 0" />
<xsl:otherwise>
<Value>
<xsl:value-of select="$titi"
disable-output-escaping="yes"/>
</Value>
<xsl:call-template name= "GetAllValue">
<xsl:with-param name="path" select="$path"/>
<xsl:with-param name="path" select="$tag"/>
<xsl:with-param name="index" select="$index+1"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>oose>
</xsl:template>
and i call template
<xsl:template match="/">
<HTML>
<BODY>
<xsl:call-template name= "GetAllValue">
<xsl:with-param name="path" select="'/html/body/table/tr/td[1]/font/a'" />
<xsl:with-param name="tag" select=" 'td' " />
<xsl:with-param name="index" select="1"/>
</xsl:call-template>
</BODY>
</HTML>
</xsl:template>sl:template>
because i have to using concat function to calcule new address after
each template call, so i have use value XPATH as String and use
xalan:evaluate
but when i run this XSL i meet always error: Call to extension function
failed: http://xml.apache.org/xalan
How to solve this problem, can we avoid to use String? Please help me if
you have any idea.
Best wish.
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list