大家好我根据一个要求在我的xslt代码中一次编写了两个以上的数据,但我没有达到预期的输出可以任何一个给出一些建议
这是我的xml
<Swift>
<block4>
<tag>
<name>50K</name>
<value>
0101/0457887750
SAMAROCA
MENENDEZ Y PELAYO
</value>
</tag>
</block4>
</Swift>
我在这里写了一个xslt:
<xsl:template match="swift/message/block4/tag [name='50K']">
<xsl:variable name ="del50k" select ="(translate(substring-after(value,' '),' ','~'))"/>
<xsl:value-of select="concat(substring(value, 1, 5), ',',substring(substring-before(value,' '),6), ',',$del50k)" />
</xsl:template>
这样做是否正确?任何人都可以提供帮助
预期输出:
0101 /,0457887750,SAMAROCA~MENENDEZ Y PELAYO
答案 0 :(得分:0)
您最大的问题是value
是您的上下文节点(在模板的match
属性中定义),但您在XPath中指的是value
。这将在value
节点中查找value
节点,这显然是错误的。
在<xsl:variable>
和<xsl:value-of>
语句中,将重新调整更改为value
至.
,以改为引用当前节点。
我认为这可能不是唯一的问题,但鉴于您的模板无论如何都不会匹配该文档中的任何内容,因此很难找到可能出错的地方。一个可能的附加问题是,substring-before(value,' ')
中的<xsl:value-of>
谓词不会返回任何格式,因为在0101/etc..
之前有换行符。现在我考虑一下,这也是上一行substring-after
中的问题。这非常依赖于它实际上是如何格式化的,但是根据你在这里给出的,这是一个问题。
答案 1 :(得分:0)
我根据您的输入给您一个完整的工作示例。几点说明:
normalize-space()
并按空格分割字符串。substring-before
和substring-after
。xsl:strip-space
。<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
<xsl:output omit-xml-declaration="yes" method="text"/>
<xsl:strip-space elements="*"/>
<xsl:variable name="space" select="' '"/>
<xsl:template match="block4/tag[name='50K']">
<xsl:variable name="value" select="normalize-space(value)"/>
<xsl:variable name="code" select="substring-before($value,$space)"/>
<xsl:variable name="string1" select="concat(
substring-before($code,'/'),
'/,',
substring-after($code,'/'))"/>
<xsl:variable name="string2" select="substring-before(
substring-after($value,$space),
$space)"/>
<xsl:variable name="string3" select="substring-after(
substring-after($value,$space),
$space)"/>
<xsl:value-of select="concat($string1,',',$string2,'~',$string3)"/>
</xsl:template>
<xsl:template match="name|value"/>
</xsl:stylesheet>