有没有办法可以避免使用完整路径获取下面显示的XSLT文档中的值?我试图编辑xsl:模板匹配但无法编辑。
<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="Username" value="{/samlp:Response/saml:Assertion/saml:AttributeStatement/saml:Attribute/saml:AttributeValue[../@Name = 'UserName']}"/>
</USERINFO>
</AUTHENTICATOR>
</xsl:template>
</xsl:stylesheet>
示例XML代码段:
<saml2p:Response xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol"
Destination="https://login.com/Login/Authentication.aspx?configSet=SAML"
ID="_5ed24fbfdeb20b1d0f98ed3d87f75dd8"
IssueInstant="2015-10-26T18:19:38.218Z"
Version="2.0"
>
<saml2:Assertion xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
ID="_924982879ed0ee46ad33e21e674b2a65"
IssueInstant="2015-10-26T18:19:38.218Z"
Version="2.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
<saml2:AttributeStatement>
<saml2:Attribute Name="UserName"
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"
>User@email.com</saml2:AttributeValue>
</saml2:Attribute>
</saml2:AttributeStatement>
</saml2:Assertion>
</saml2p:Response>
答案 0 :(得分:0)
你可以把你的表达写成......
<field name="Username" value="{//saml:Attribute[@Name = 'UserName']/saml:AttributeValue}"/>
请注意@Name
上的条件实际上可能违反此处的saml:Attribute
元素,而不是针对../@Name
执行saml:AttributeValue
。
或者,如果确保XML中始终存在用户名,您也可以这样做......
<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="saml:Attribute[@Name = 'UserName']">
<AUTHENTICATOR>
<USERINFO>
<field name="Username" value="{saml:AttributeValue}"/>
</USERINFO>
</AUTHENTICATOR>
</xsl:template>
<xsl:template match="text()" />
</xsl:stylesheet>
匹配text()
的模板是忽略XML中可能出现的任何其他AttributeValue
元素的文本。