【问题标题】:Split by delimiter using xslt 1.0使用 xslt 1.0 按分隔符拆分
【发布时间】:2023-04-04 08:08:01
【问题描述】:

这是我的 XML:

<LIGHT_DESCRIPTION>
    <LIGHT_CHARACTERISTICS>Q+LFl</LIGHT_CHARACTERISTICS>
    <LIGHT_SIGNAL_GROUP>(6)(1)</LIGHT_SIGNAL_GROUP>
</LIGHT_DESCRIPTION>

对我来说有必要按字符“+”分割:

在 Q 被提及 --> (6)

在LF1被引用--> (1)

这是使用 XSLT 1.0 的输出:

Q (6)  -  LF1 (1)

【问题讨论】:

  • 你的例子没有阐述转换的逻辑。
  • 恐怕还是不清楚。可以有多少“对”?
  • Light_characteristics的对偶,可以是'+'+1的个数。
  • 例如,如果我计算两个“+”号,则有 3 个“对”。

标签: xslt xslt-1.0 tokenize


【解决方案1】:

试试这个方法?

XSLT 1.0

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

<xsl:template match="/LIGHT_DESCRIPTION">
    <xsl:call-template name="tokenize">
        <xsl:with-param name="names" select="LIGHT_CHARACTERISTICS"/>
        <xsl:with-param name="values" select="LIGHT_SIGNAL_GROUP"/>
    </xsl:call-template>
</xsl:template>

<xsl:template name="tokenize">
    <xsl:param name="names"/>
    <xsl:param name="values"/>
    <xsl:choose>
        <xsl:when test="contains($names, '+')">
            <xsl:value-of select="substring-before($names, '+')"/>
            <xsl:text> </xsl:text>
            <xsl:value-of select="substring-before($values, ')')"/>
            <xsl:text>) - </xsl:text>
             <!-- recursive call -->
            <xsl:call-template name="tokenize">
                        <xsl:with-param name="names" select="substring-after($names, '+')"/>
                        <xsl:with-param name="values" select="substring-after($values, ')')"/>
            </xsl:call-template>
        </xsl:when>
        <xsl:otherwise>
            <xsl:value-of select="concat($names, ' ', $values)"/>
        </xsl:otherwise>
    </xsl:choose>
 </xsl:template>

</xsl:stylesheet>

注意:恕我直言,您正在将一种错误的格式换成另一种同样糟糕的格式。您为什么不借此机会以既定格式(例如 .csv)生成输出?

【讨论】:

  • 谢谢,运行良好!!