0

我正在寻找有关我尝试创建的 XSLT 的帮助 - 我正在尝试解决的问题是,如果 attributeId 包含子字符串“fault_code”,我想获取 AttributeAssignment 的值:

输入:

 <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> 
4

1 回答 1

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>
于 2013-04-18T22:10:51.257 回答