如何根据使用XLST的某个节点的存在使节点结果不同?

时间:2010-06-30 21:29:48

标签: xml xslt

我的系统生成一个XML,其中包含一个节点,该节点根据事件类型提供不同的名称。 名称可以是<floatRate><fixedRate>。路径始终相同,只是不同的节点名称。

我需要一个可以根据该名称填充一个字段的转换。该字段将被称为<type>,并且根据节点名称,竞争必须是浮动的或固定的。 可以这样做吗?

3 个答案:

答案 0 :(得分:1)

此转化

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>
    <xsl:strip-space elements="*"/>

 <xsl:template match="node()|@*">
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
 </xsl:template>

 <xsl:template match="fixedRate|floatRate">
   <type><xsl:value-of select=
           "substring-before(name(),'Rate')"/></type>
 </xsl:template>
</xsl:stylesheet>

应用于此XML文档时

<rates>
    <fixedRate>2.3</fixedRate>
    <floatRate>1.1</floatRate>
</rates>

产生想要的结果

<rates>
   <type>fixed</type>
   <type>float</type>
</rates>

答案 1 :(得分:0)

Select / mach表达式可以做布尔“或”,如

match="floatRate|fixedRate"

编辑您的问题并添加输入样本,预期输出以及您已尝试获取更多帮助的内容

答案 2 :(得分:0)

假设我们将此文档作为输入:

<result>
    <floatRate>1.1</floatRate>
</result>

此样式表:

<xsl:stylesheet
          xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
          version="1.0">
    <xsl:template match="result">
        <type>
        <xsl:value-of select="substring-before(name(floatRate|fixedRate),'Rate')"/>
        </type>
    </xsl:template>
    <xsl:template match="text()"/>
</xsl:stylesheet>

输出:

<type>float</type>
相关问题