[xmlsec] XSLT questions/issues
Ferrell Moultrie (ISSAtlanta)
fmoultrie@iss.net
Fri Jul 12 23:42:41 PDT 2002
Aleksey:
Thank you for your answers on LibXML2 and XMLSec versus Xerces. I've
downloaded and built the libxml2 and xslt projects and have been running
bits of our code through them. I've got three questions about differences
between your xslt and the Xalan and/or MS xslt:
1) your xpath expressions appear to require the apostrophe rather than the
double-quote for delimiting data values, at least one the testXPath utility.
I.e.,
testXPath -i file.xml /root//EndUser[Country=\'US\'] works, but,
testXPath -i file.xml /root//EndUser[Country=\"US\"] doesn't.
In the first case, the XPath parse tree shows:
EQUAL =
COLLECT 'attributes' 'name' 'node' Country
NODE
ELEM Object is a string : US
COLLECT 'attributes' 'name' 'node' Country
NODE
In the second case, it shows:
EQUAL =
COLLECT 'attributes' 'name' 'node' Country
NODE
COLLECT 'child' 'name' 'node' US
NODE
I believe the backslash-quoting of the apostrophe or double-quote should
pass through the ksh variant I'm running.
2) My XSLT templates have explicit support for copying XML comments through
to the output. This works with MSXML and Xalan but comments get dropped with
you XSLT. Is this a configuration or other option or does your DOM just
ignore comments (as it's allowed to do, but not required to do, by the spec
-- but which is inconvenient from my perspective).
3) Your XSLT appears to want an explicit root match as the first template.
I.e.,
<xsl:template match='/'>
<xsl:apply-templates select="@* | node()"/>
</xsl:template>
<xsl:template match='/Keys'>
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
... other templates ...
<xsl:template match="@* | node()" priority="-10">
<xsl:copy-of select="."/>
</xsl:template>
And with input XML whose root begins:
<Keys>
... other XML
Your XSLT, MSXSL, and Xalan XSLT all process the above script and generate
essentially the same output. If I delete the first three lines however (the
match='/'), then MSXSL and Xalan are both still happy but your XSLT matches
"/" against the final template, i.e., the verbose output shows:
...
Registering global variables from transform2.xsl
xsltProcessOneNode: applying template '@* | node()' for /
xsltCopyOf: select .
xsltCopyOf: result is a node set
What is the reasoning behind this behavioral difference? The MSXSL/Xalan
behavior appears to be correct as I read the books and samples I have but
I'm far from an expert in XSLT so what's the cause of the incompatibility
here?
Sorry for so many questions but I'm trying to figure out how much work it
would be to port a portion of our apps to using libxml2 and these are the
issues that popped out with some initial compatibility testing.
Thanks!!!
Ferrell
----------------------------------------------------------------
Ferrell Moultrie
Home- (770)552-0486 Fax- (770)552-0489 ferrell@moultrie.org
Work[ISS]- (404)236-2849 Fax- (404)236-2609 FMoultrie@iss.net
More information about the xmlsec
mailing list