我正在寻找一些我正在尝试创建的XSLT的帮助 - 我正在尝试的问题是,如果attributeId包含子字符串“fault_code”,我想获得AttributeAssignment的值:
INPUT:
<AttributeAssignment AttributeId="att_obl_authorization_rule_fault_code" DataType="string" Issuer="" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:environment">ERROR</AttributeAssignment>
XSLT我试过:
<xsl:template match="AttributeAssignment">
<xsl:if test="contains=('{@AttributeId}', 'fault_code')" >
<faultcode> soapenv:<xsl:value-of select='.'/>
</faultcode>
</xsl:if>
</xsl:template>
答案 0 :(得分:0)
:此:强>
<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>