如何一次连接两个以上的需求



嗨,我已经在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,'&#13;'),'&#13;','~'))"/>
    <xsl:value-of select="concat(substring(value, 1, 5), ',',substring(substring-before(value,'&#13;'),6), ',',$del50k)" /> 
</xsl:template>

这样做对不对?有人能帮吗

预期输出:

0101/,0457887750,萨马罗卡~梅嫩德斯Y PELAYO

我将根据您的输入为您提供一个完整的工作示例。几个注意事项:

  • 使用normalize-space()并按空格分隔字符串
  • 只需玩substring-beforesubstring-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="'&#x20;'"/>
    <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> 

最大的问题是value是上下文节点(在模板的match属性中定义),但您在XPath中引用了value。这将在value节点中查找value节点,这显然是错误的。

<xsl:variable><xsl:value-of>语句中,将引用从value更改为.,以引用当前节点。

我认为这可能不是唯一的问题,但考虑到你的模板无论如何都不会匹配文档中的任何内容,很难推断出它可能出错的地方。一个可能的额外问题是,<xsl:value-of>中的substring-before(value,'&#13;')谓词不会返回任何给定格式的内容,因为0101/etc..之前有一个换行符。现在我想一想,这也是上一行substring-after中的问题。这在很大程度上取决于它的实际格式,但从你在这里给出的内容来看,这是一个问题。

相关内容

  • 没有找到相关文章

最新更新