|
Subject: Re: [xsl] Why doesn't this simple XSLT (Identity transform) work? From: <ohaya@xxxxxxx> Date: Tue, 1 Dec 2009 21:48:18 -0500 |
Hi Ken,
Also, I think that what was 'throwing me off' was that the "sig:" namespace was implicit. That was why I was using just "Signature" instead of "sig:Signature".
Thanks again,
Jim
---- ohaya@xxxxxxx wrote:
> Hi Ken,
>
> Thanks, not just for the solution, but for the VERY detailed explanation. I know that I'll have to re-re-read your post, probably several more times, but if I'm understanding, basically the problem was that the match I was using was not matching anything, so that xsl:template was not "catching", and the reason for not matching was because of the namespace.
>
> Is that right?
>
> Thanks again,
> Jim
>
>
>
>
> ---- "G. Ken Holman" <gkholman@xxxxxxxxxxxxxxxxxxxx> wrote:
> > At 2009-12-01 19:43 -0500, ohaya@xxxxxxx wrote:
> > >It's been awhile since I've worked with XSLT, but I'm having to
> > >implement one that removes an element (<Signature>) from the
> > >incoming (SOAP) message.
> >
> > Actually, you want to remove the element:
> >
> > {http://www.w3.org/2000/09/xmldsig#}Signature
> >
> > ... regardless of the prefix used in the syntax of the input XML.
> >
> > >I know that this should be simple, and I know that I have written
> > >similar XSLT before, but for some reason, I can get this to work.
> >
> > You are forgetting that XSLT matches on the expanded name of a node
> > and not the specified name of the node. Prefixes are irrelevant
> > (other than playing the role of associating the namespace URI string
> > for the expanded name).
> >
> > >Here's an example SOAP message:
> > >...
> > >And, here's the XSLT that I'm using:
> > >...
> >
> > Thank you for providing the plug-and-play.
> >
> > >What the XSLT seems to be doing is just doing the Identity
> > >transform, and copying everything from the input message to the
> > >output, i.e., the "<xsl:template match="//Signature">" is not
> > >getting processed at all.
> >
> > Right. And, BTW, the "//" isn't needed, but that isn't what is wrong.
> >
> > >I've tried different things for that template match, including just
> > >"Signature", a "fully-qualified" match term, etc.
> >
> > You didn't try a qualified name match. A qualified name has as its
> > lexical space the specified name for the element and as its value
> > space the expanded name for the element. Two qualified names are
> > compared by their expanded names. A qualified name is exposed and
> > written using the specified name and the in-scope namespaces for the
> > prefix used or not by the specified name.
> >
> > >I have the impression that the XSLT processing should always use the
> > >more specific match (i.e., the one above, and not the Identity
> > >transform), but it doesn't seem to be working :(...
> >
> > That isn't true in general but happens to be true in this case, you
> > just haven't named the element properly.
> >
> > Some of the detail relevant to your situation is that every match
> > pattern that is more complex than a simple name has the same inferred
> > priority of 0.5, without any kind of "increasing level of complexity
> > based on length", just 0.5 full stop. A simple name has the inferred
> > priority of 0. A wild card has the inferred priority of
> > -0.5. (There are a couple others not in play here) Since all of
> > your template rules that match the Signature element have different
> > priorities, the one that is highest (the simple name) trumps the
> > lower one (the element wild card).
> >
> > >I'm sure that I am missing something really obvious here,
> >
> > The qualified element name in your XSLT has to match the qualified
> > element name in the XML (in the value space, not in the lexical
> > space, thus the expanded names must be equal).
> >
> > The specified element name in your XSLT has no relation to the
> > specified element name in the XML (the lexical space).
> >
> > I hope the solution below illustrates this for you.
> >
> > . . . . . . . . . . Ken
> >
> > t:\ftemp>type ohaya.xml
> > <SOAP:Envelope xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion"
> > xmlns:samlp="urn:oasis:names:tc:SAML:1.0:protocol"
> > xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/"
> > xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
> > xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
> > <SOAP:Header>
> > <wsse:Security SOAP:mustUnderstand="1">
> > <saml:Assertion MajorVersion="1" MinorVersion="1"
> > AssertionID="ID46a342be-9d3a-437a-8a26-85fcd72a723d"
> > Issuer="http://foo.com" IssueInstant="2009-12-01T21:55:13Z">
> > <saml:Conditions NotBefore="2009-12-01T21:54:58Z"
> > NotOnOrAfter="2009-12-01T22:10:28Z"/>
> > <saml:AuthenticationStatement
> > AuthenticationMethod="urn:oasis:names:tc:SAML:1.0:am:unspecified"
> > AuthenticationInstant="2009-12-01T21:55:13Z">
> > .....
> > </saml:AuthenticationStatement>
> > <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
> > ...
> > </Signature></saml:Assertion></wsse:Security>
> > </SOAP:Header>
> > <env:Body>
> > <m:hello xmlns:m="http://services">
> > <m:x>123</m:x></m:hello>
> > </env:Body>
> > </SOAP:Envelope>
> >
> > t:\ftemp>call xslt ohaya.xml ohaya.xsl
> > <?xml version="1.0" encoding="utf-8"?><SOAP:Envelope
> > xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/"
> > xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion"
> > xmlns:samlp="urn:oasis:names:tc:SAML:1.0:protocol"
> > xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
> > xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
> > <SOAP:Header>
> > <wsse:Security SOAP:mustUnderstand="1">
> > <saml:Assertion MajorVersion="1" MinorVersion="1"
> > AssertionID="ID46a342be-9d3a-437a-8a26-85fcd72a723d"
> > Issuer="http://foo.com" IssueInstant="2009-12-01T21:55:13Z">
> > <saml:Conditions NotBefore="2009-12-01T21:54:58Z"
> > NotOnOrAfter="2009-12-01T22:10:28Z"/>
> > <saml:AuthenticationStatement
> > AuthenticationMethod="urn:oasis:names:tc:SAML:1.0:am:unspecified"
> > AuthenticationInstant="2009-12-01T21:55:13Z">
> > .....
> > </saml:AuthenticationStatement>
> > </saml:Assertion></wsse:Security>
> > </SOAP:Header>
> > <env:Body>
> > <m:hello xmlns:m="http://services">
> > <m:x>123</m:x></m:hello>
> > </env:Body>
> > </SOAP:Envelope>
> > t:\ftemp>type ohaya.xsl
> > <?xml version="1.0" encoding="utf-8"?>
> > <xsl:stylesheet version="1.0"
> > xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> > xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
> > xmlns:dp="http://www.datapower.com/extensions"
> > xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/"
> > xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion"
> > xmlns:samlp="urn:oasis:names:tc:SAML:1.0:protocol"
> > xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
> > xmlns:sig="http://www.w3.org/2000/09/xmldsig#"
> > >
> > <xsl:output method="xml"/>
> >
> > <xsl:template match="node()|@*">
> > <xsl:copy>
> > <xsl:apply-templates select="node()|@*"/>
> > </xsl:copy>
> > </xsl:template>
> >
> > <xsl:template match="sig:Signature">
> > </xsl:template>
> >
> > </xsl:stylesheet>
> >
> > t:\ftemp>rem Done!
> >
> >
> >
> > --
> > Vote for your XML training: http://www.CraneSoftwrights.com/s/i/
> > Crane Softwrights Ltd. http://www.CraneSoftwrights.com/s/
> > Training tools: Comprehensive interactive XSLT/XPath 1.0/2.0 video
> > Video lesson: http://www.youtube.com/watch?v=PrNjJCh7Ppg&fmt=18
> > Video overview: http://www.youtube.com/watch?v=VTiodiij6gE&fmt=18
> > G. Ken Holman mailto:gkholman@xxxxxxxxxxxxxxxxxxxx
> > Male Cancer Awareness Nov'07 http://www.CraneSoftwrights.com/s/bc
> > Legal business disclaimers: http://www.CraneSoftwrights.com/legal
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] Why doesn't this simple X, ohaya | Thread | Re: [xsl] Why doesn't this simple X, G. Ken Holman |
| Re: [xsl] Why doesn't this simple X, ohaya | Date | [xsl] Group Techniques by xslt, Joga Singh Rawat |
| Month |