我认为我有这个工作,但我需要建议。我想知道这是否适合我的要求。 我需要根据该元素中包含的内容对元素应用不同的转换规则。我试图搜索'xsl'和'choose','contains','substring'。我似乎无法找到适用于这种情况的解决方案。
以下是此元素的各种方案:
如果它以U开头,我需要在'/'
之前的所有内容原始值:UJXXXXX / 001
转型:UJXXXXX
如果它以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>
任何有关潜在漏洞的反馈或更有效的方法来实现这一点都值得赞赏。
感谢。
答案 0 :(得分:1)
你的XSLT看起来很好。您可以考虑使用starts-with
函数而不是substring
,我觉得它更容易阅读,但我不确定它是否更快。
答案 1 :(得分:0)
我自己的风格是使用模板规则。
<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>
等