[xsl] XSLT to populate a SAML AttributeStatement from an XML

Subject: [xsl] XSLT to populate a SAML AttributeStatement from an XML
From: "ohaya ohaya@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Wed, 18 Jan 2023 17:05:56 -0000
[I originally sent this to the wrong email address... sorry!]

Hi,

I have an application where I am retrieving a number of attributes and values
from a web service, in the form of an XML file, and I want to create and
populate a SAML AttributeStatement from the attributes and values in that XML
file.  A couple of complications (to me):

- The attribute names in the XML file are different than the corresponding
attributes in the SAML AttributeStatement.
- Some of the attributes are multi-valued:  in the source XML file, the values
are a colon-separated string (e.g. ab:cd:ef), but in the AttributeStatement,
each value will be in separate <saml:Attribute> element.B 

Here's an example source XML:

<record>
.
.
.
  <adrRecord>
    <PN_ID>1111111</PN_ID>
    <personnel>
      <ADM_ORG_CD>urn:NORM:DEPT</ADM_ORG_CD>
      <DOD_ASSOC_CD>urn:NORM:V01</DOD_ASSOC_CD>
    </personnel>
  </adrRecord>
</record>

and the AttributeStatement I want to transform the above to is something
like:


    <saml:Attribute Name="MY_PN_ID"
NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic">
        <saml:AttributeValue xmlns:xsd="http://www.w3.org/2001/XMLSchema";
xsi:type="xsd:string">1111111</saml:AttributeValue>
    </saml:Attribute>


    <saml:Attribute Name="MY_ORG_CD"
NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic">
        <saml:AttributeValue xmlns:xsd="http://www.w3.org/2001/XMLSchema";
xsi:type="xsd:string">DEPT</saml:AttributeValue>
        <saml:AttributeValue xmlns:xsd="http://www.w3.org/2001/XMLSchema";
xsi:type="xsd:string">urn</saml:AttributeValue>
        <saml:AttributeValue xmlns:xsd="http://www.w3.org/2001/XMLSchema";
xsi:type="xsd:string">NORM</saml:AttributeValue>
    </saml:Attribute>


    <saml:Attribute Name="MY_ASSOC_CD"
NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic">
        <saml:AttributeValue xmlns:xsd="http://www.w3.org/2001/XMLSchema";
xsi:type="xsd:string">urn</saml:AttributeValue>
        <saml:AttributeValue xmlns:xsd="http://www.w3.org/2001/XMLSchema";
xsi:type="xsd:string">NORM</saml:AttributeValue>
        <saml:AttributeValue xmlns:xsd="http://www.w3.org/2001/XMLSchema";
xsi:type="xsd:string">V01</saml:AttributeValue>
    </saml:Attribute>

</saml:AttributeStatement>

Can someone suggest the best approach to do this?  I actually would prefer to
have a series of transforms to do this, rather than just a single XSLT, mainly
so I can be able to see how things are working (or not working).

Thanks,
Jim

Current Thread