(Apologies to xml-dev readers who may have seen my related message)
It's not a theoretical breakthrough or anything like that, but I thought
xsl-list readers might be interested in a working example of calling a
Web Service from XSLT.
For files like this:
<cardlist>
<card number="00000000000000"/>
</cardlist>
you can run (with msxsl.exe - the "https:" URL appears to break saxon)
the following transform:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0" xmlns:cdyne="http://ws.cdyne.com/">
<xsl:output indent="yes"/>
<xsl:variable name="CheckCC"
select="'https://secure.cdyne.com/creditcardverify/luhnchecker.asmx/CheckCC?CardNumber='"
/>
<!-- -->
<!-- do a "pass-through" type transform -->
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<!-- -->
<!-- for everything except elements in the target namespace -->
<xsl:template match="card">
<xsl:copy>
<xsl:attribute name="CardValid">
<xsl:value-of select="document(concat($CheckCC,
@number))/cdyne:ReturnIndicator/cdyne:CardValid = 'true'" />
</xsl:attribute>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<!-- -->
</xsl:stylesheet>
to get each card element marked up with a CardValid attribute containing
a boolean true or false.
Not something I'd use in production lightly, and limited to Web Services
with an HTTP GET binding, but satisfactory in its way.
Francis.
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list