2016-02-09 209 views
0

從傳入SAML響應:XSLT創建逗號分隔的列表

<saml2:Attribute Name="FirstName" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"> 
<saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">Joe</saml2:AttributeValue> 
</saml2:Attribute> 

代碼從XSLT轉換文件:

<field name="FirstName" value="{//saml:Attribute[@Name='FirstName']/saml:AttributeValue}"/> 

產生這樣的輸出:

<field name="FirstName" value="Joe"/> 

這是正常工作。但一個指定的節點可以有多個值,如:

<saml2:Attribute Name="FirstName" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"> 
<saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">Joe</saml2:AttributeValue> 
<saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">Suzy</saml2:AttributeValue> 
</saml2:Attribute> 

而且我需要的輸出爲:

<field name="FirstName" value="Joe,Suzy"/> 

什麼我需要在我的轉換文件更改爲得到這個期望的輸出?

UPDATE

我能得到現在利用「小桑蒂」的建議,下面的輸出,但我似乎無法得到逗號分隔符的工作。不確定將文件添加到文檔中的位置?

<field name="FirstName" value="JoeSuzy"/> 

下面是引用完整的XSLT文件:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" 
    xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" 
    xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 
<xsl:template match="/"> 
    <AUTHENTICATOR> 
     <USERINFO> 
       <field name="FirstName"> 
        <xsl:attribute name="value"> 
         <xsl:apply-templates select="//saml:Attribute[@Name='FirstName']/saml:AttributeValue"></xsl:apply-templates> 
        </xsl:attribute> 
       </field>  
     </USERINFO> 
    </AUTHENTICATOR> 
</xsl:template> 
</xsl:stylesheet> 
+0

您使用的是XSLT 1.0還是2.0? - P.S.請發佈**完整的**示例,而不是從他們的上下文中刪除片段。 –

回答

0

我重新寫你的現場製作模板,像這樣:

<field name="FirstName"> 
    <xsl:attribute name="value"> 
     <xsl:apply-templates select="saml2:Attribute[@Name='FirstName']/saml2:AttributeValue"></xsl:apply-templates> 
    </xsl:attribute> 
</field> 

,然後添加一個新的模板匹配屬性值:

<xsl:template match="saml2:AttributeValue"> 
<xsl:value-of select="."/><xsl:if test="position() &lt; last()">,</xsl:if> 
</xsl:template> 

(條件確保只有相鄰值之間會有一個逗號,並且不包含孤立逗號。)

+0

感謝您的回覆。我能夠把它接近工作,似乎無法弄清楚逗號分隔符。 – PixelPaul

+0

您忘記爲我發佈的「saml2:AttributeValue」添加新模板。 (還要注意saml/saml2命名空間的混淆)。 –