这个:
<xsl:if test="contains=('{@AttributeId}', 'fault_code')" >
无效。改用这个:
<xsl:if test="contains(@AttributeId, 'fault_code')" >
要测试,当这个 XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="AttributeAssignment">
<xsl:if test="contains(@AttributeId, 'fault_code')">
<faultcode>soapenv:<xsl:value-of select="."/></faultcode>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
...或者这个更简单、更可扩展的 XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="AttributeAssignment[contains(@AttributeId, 'fault_code')]">
<faultcode>
<xsl:value-of select="concat('soapenv:', .)"/>
</faultcode>
</xsl:template>
</xsl:stylesheet>
...针对提供的 XML 应用:*
<AttributeAssignment AttributeId="att_obl_authorization_rule_fault_code" DataType="string" Issuer="" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:environment">ERROR</AttributeAssignment>
...产生了想要的结果:
<faultcode>soapenv:ERROR</faultcode>