如何从xslt中的字符串解析管道符号

如何从xslt中的字符串解析管道符号,xslt,Xslt,如何从xslt中的字段解析管道签名。e、 g Dummy 1 | Dummy 2 | Dummy 3 | Dummy 4 问候,, Sarah如果使用XSLT 2.0处理器,则可以使用标记化函数() <foo>dummy1|dummy2|dummy3|dummy4</foo> dummy1 | dummy2 | dummy3 | dummy4 你可以匹配 <xsl:template match="foo"> <xsl:value-of selec

如何从xslt中的字段解析管道签名。e、 g

Dummy 1 | Dummy 2 | Dummy 3 | Dummy 4

问候,,
Sarah

如果使用XSLT 2.0处理器,则可以使用
标记化
函数()

<foo>dummy1|dummy2|dummy3|dummy4</foo>
dummy1 | dummy2 | dummy3 | dummy4
你可以匹配

<xsl:template match="foo">
  <xsl:value-of select="tokenize(., '\|')"/>
</xsl:template>


要输出
dummy1 dummy2 dummy3 dummy4
。如果您使用XSLT 1.0处理器,您可以检查它是否支持扩展函数,如或您需要编写一个递归命名模板来分割输入。

如果您使用XSLT 2.0处理器,您可以使用
标记化
函数(),例如,输入为

<foo>dummy1|dummy2|dummy3|dummy4</foo>
dummy1 | dummy2 | dummy3 | dummy4
你可以匹配

<xsl:template match="foo">
  <xsl:value-of select="tokenize(., '\|')"/>
</xsl:template>


要输出
dummy1 dummy2 dummy3 dummy4
。如果您使用XSLT 1.0处理器,您可以检查它是否支持扩展函数,例如,或者您需要编写一个递归的命名模板来拆分输入。

在xlst 1.0中,我通常使用命名模板的递归调用,例如

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

    <xsl:variable name="dummyVar" select="'dummy1|dummy2|dummy3|dummy4'" />
    <xsl:variable name="delimiter" select="'|'" />

    <xsl:template match="/">
        <dummies>
            <xsl:call-template name="parseDummy">
                <xsl:with-param name="parsedString" select="$dummyVar" />
            </xsl:call-template>
        </dummies>
    </xsl:template>

    <xsl:template name="parseDummy">
        <xsl:param name="parsedString" />
        <xsl:choose>
            <xsl:when test="contains($parsedString, $delimiter)">
                <xsl:element name="{substring-before($parsedString, $delimiter)}" />
                <xsl:call-template name="parseDummy">
                    <xsl:with-param name="parsedString" select="substring-after($parsedString, $delimiter)" />
                </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
                <xsl:element name="{$parsedString}" />
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>
</xsl:stylesheet>

这取决于您需要对解析的值执行什么操作,在示例中,我使用假人的名称构造元素


注意正在变化的上下文。

在xlst 1.0中,我通常使用命名模板的递归调用,例如

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

    <xsl:variable name="dummyVar" select="'dummy1|dummy2|dummy3|dummy4'" />
    <xsl:variable name="delimiter" select="'|'" />

    <xsl:template match="/">
        <dummies>
            <xsl:call-template name="parseDummy">
                <xsl:with-param name="parsedString" select="$dummyVar" />
            </xsl:call-template>
        </dummies>
    </xsl:template>

    <xsl:template name="parseDummy">
        <xsl:param name="parsedString" />
        <xsl:choose>
            <xsl:when test="contains($parsedString, $delimiter)">
                <xsl:element name="{substring-before($parsedString, $delimiter)}" />
                <xsl:call-template name="parseDummy">
                    <xsl:with-param name="parsedString" select="substring-after($parsedString, $delimiter)" />
                </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
                <xsl:element name="{$parsedString}" />
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>
</xsl:stylesheet>

这取决于您需要对解析的值执行什么操作,在示例中,我使用假人的名称构造元素


注意正在更改的上下文。

嗨,Jirka,我需要这种格式,我无法理解如何获取这些字段中的值。检查此SCB MAIN 123111233097812312301主分支提供pls输入xml-我不知道像SCB MAIN这样的值来自何处。渣打银行| SCBMAIN | 24 1130978 01 | Main Branch | 7343347788899 | | | 21534271787 | Test | u TestXXYY在解析这些字段后需要这些值NULL NULL NULL NULL NULL NULL NULL我很抱歉,但我在前面的示例中看不到任何逻辑(即使它的格式不是很好)。输入
和输出
之间的关系是什么?嗨,Jirka,我需要这种格式,我无法理解如何在这些字段中获取值。检查此SCB MAIN 123111233097812312301主分支提供pls输入xml-我不知道像SCB MAIN这样的值来自何处。渣打银行| SCBMAIN | 24 1130978 01 | Main Branch | 7343347788899 | | | 21534271787 | Test | u TestXXYY在解析这些字段后需要这些值NULL NULL NULL NULL NULL NULL NULL我很抱歉,但我在前面的示例中看不到任何逻辑(即使它的格式不是很好)。输入
和输出
之间的关系是什么?