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

Xml XSLT翻译问题匹配子字符串文本,xml,xslt,Xml,Xslt,我正在寻找有关我试图创建的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

我正在寻找有关我试图创建的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> 
错误
我试过:

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

soapenv:
此:

<xsl:if test="contains=('{@AttributeId}', 'fault_code')" >
<xsl:if test="contains(@AttributeId, 'fault_code')" >
<?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>
<?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>
<faultcode>soapenv:ERROR</faultcode>

无效。改为使用此选项:

<xsl:if test="contains=('{@AttributeId}', 'fault_code')" >
<xsl:if test="contains(@AttributeId, 'fault_code')" >
<?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>
<?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>
<faultcode>soapenv:ERROR</faultcode>


进行测试,当此XSLT:

<xsl:if test="contains=('{@AttributeId}', 'fault_code')" >
<xsl:if test="contains(@AttributeId, 'fault_code')" >
<?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>
<?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>
<faultcode>soapenv:ERROR</faultcode>

soapenv:
…或者更简单、更可扩展的XSLT:

<xsl:if test="contains=('{@AttributeId}', 'fault_code')" >
<xsl:if test="contains(@AttributeId, 'fault_code')" >
<?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>
<?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>
<faultcode>soapenv:ERROR</faultcode>

…应用于提供的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>
错误
…生成所需结果:

<xsl:if test="contains=('{@AttributeId}', 'fault_code')" >
<xsl:if test="contains(@AttributeId, 'fault_code')" >
<?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>
<?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>
<faultcode>soapenv:ERROR</faultcode>
soapenv:错误