我的系统生成一个XML,其中包含一个节点,该节点根据事件类型提供不同的名称。
名称可以是<floatRate>
或<fixedRate>
。路径始终相同,只是不同的节点名称。
我需要一个可以根据该名称填充一个字段的转换。该字段将被称为<type>
,并且根据节点名称,竞争必须是浮动的或固定的。
可以这样做吗?
答案 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>