XSLT翻译问题匹配子字符串文本

时间:2013-04-18 21:43:37

标签: xml xslt

我正在寻找一些我正在尝试创建的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</At‌​tributeAssignment> 

XSLT我试过:

<xsl:template match="AttributeAssignment">
  <xsl:if test="contains=('{@AttributeId}', 'fault_code')" > 
    <faultcode> soapenv:<xsl:value-of select='.'/> 
    </faultcode> 
     </xsl:if> 
</xsl:template> 

1 个答案:

答案 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>