【问题标题】:Need advice on using xsl choose with contains and substring需要有关使用包含和子字符串的 xsl 选择的建议
【发布时间】:2012-04-06 13:47:21
【问题描述】:

我想我有这个工作,但我需要建议。我想知道这是否适合我的要求。 我需要根据元素中包含的内容对元素应用不同的转换规则。我试图搜索“xsl”和“选择”、“包含”、“子字符串”。我似乎找不到适用于这种情况的解决方案。

以下是此元素的各种场景:

  1. 如果它以 U 开头,我需要'/'之前的所有内容

    • 原始值:UJXXXXXX/001

    • 已转换:UJXXXXXX

  2. 如果它以 ECG_001 开头,我需要 ECG_001 之后的所有内容

    • 原始值:ECG_0012345678

    • 转换:12345678

  3. 如果它不符合上述条件并且在“/”之后包含一个'/',则取每个'/'

    • 原始值:F5M/12345678

    • 转换:12345678

  4. 如果不满足 1,2 或 3 就给我这个值

    • 原始值:12345678

    • 转换:12345678

这是我目前所拥有的:

<xsl:variable name="CustomerPO">
        <xsl:choose>
            <xsl:when test="contains(substring(rma/header/CustomerPO,1,1), 'U')">
                <xsl:value-of select="substring-before(rma/header/CustomerPO,'/')"/>
            </xsl:when>
            <xsl:when test="contains(rma/header/CustomerPO, 'ECG_001')">
                <xsl:value-of select="substring-after(rma/header/CustomerPO,'ECG_001')"/>
            </xsl:when>
            <xsl:when test="contains(rma/header/CustomerPO, '/')">
                <xsl:value-of select="substring-after(rma/header/CustomerPO, '/')"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="rma/header/CustomerPO"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:variable>

感谢任何有关潜在漏洞或更有效方法的反馈。

谢谢。

【问题讨论】:

  • 我认为这已经足够好了。我找不到任何问题,我认为没有更好的解决方案。仅当您使用 javascript 或外部库时,您才能以不同的方式执行此操作,但我认为这不会提高性能。

标签: xslt xpath substring contains


【解决方案1】:

您的 XSLT 看起来不错。您可以考虑使用starts-with 函数而不是substring,我发现它更易于阅读,但我不确定它是否更快。

【讨论】:

  • 是的,这就是我想要的。我试图找到一个开头的功能。不知道我是如何错过开始的。谢谢。
【解决方案2】:

我自己的风格是使用模板规则。

<xsl:template match="CustomerPO[starts-with(., 'U')]">
  <xsl:value-of select="substring-before(., '/')"/>
</xsl:template>

<xsl:template match="CustomerPO[starts-with(., 'ECG_001')]">
  <xsl:value-of select="substring-after(., 'ECG_001')"/>
</xsl:template>

等等

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-30
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-08
    • 1970-01-01
    相关资源
    最近更新 更多