【发布时间】:2012-04-06 13:47:21
【问题描述】:
我想我有这个工作,但我需要建议。我想知道这是否适合我的要求。 我需要根据元素中包含的内容对元素应用不同的转换规则。我试图搜索“xsl”和“选择”、“包含”、“子字符串”。我似乎找不到适用于这种情况的解决方案。
以下是此元素的各种场景:
-
如果它以 U 开头,我需要'/'之前的所有内容
原始值:UJXXXXXX/001
已转换:UJXXXXXX
-
如果它以 ECG_001 开头,我需要 ECG_001 之后的所有内容
原始值:ECG_0012345678
转换:12345678
-
如果它不符合上述条件并且在“/”之后包含一个'/',则取每个'/'
原始值:F5M/12345678
转换:12345678
-
如果不满足 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